0Pricing
SQL Academy · Lekcja

Indeksy B-tree a Hash a GiST a GIN

Porównywać główne typy indeksów w PostgreSQL i wybierać właściwy do zapytań sprawdzających równość, zakres, geometrię, JSON i pełnotekstowych

Indeksy B-tree a Hash a GiST a GIN to bezpłatna lekcja SQL Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej SQL Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs SQL Academy zawiera 4 lekcji w sumie.

Przegląd typów indeksów

PostgreSQL ma kilka typów indeksów, z których każdy jest zoptymalizowany pod kątem innych sposobów dostępu do danych:

  • B-tree — równości i zakresy (domyślny)
  • Hash — tylko równości
  • GiST — dane geometryczne, pełnotekstowe i niestandardowe
  • GIN — wartości złożone (tablice, JSONB, wyszukiwanie pełnotekstowe)
  • BRIN — zakresy bloków — ogromne, posortowane tabele
  • SP-GiST — drzewa z podziałem przestrzeni

B-tree: domyślny typ

Używany w 95% przypadków. Obsługuje operatory =, <, <=, >, >=, BETWEEN oraz ORDER BY:

CREATE INDEX users_email_idx ON users(email);
CREATE INDEX orders_created_at_idx ON orders(created_at DESC);

Indeks Hash

Obsługuje tylko wyszukiwanie według równości. Jest odporny na awarie od PG 10. Jest mniejszy i nieco szybszy od B-tree dla czystych porównań równości, ale ma bardzo wąskie zastosowanie:

CREATE INDEX sessions_token_hash ON sessions USING HASH (token);
-- Useful for very high-cardinality equality lookups; usually B-tree is fine.

Indeks GiST

Generalised Search Tree — rozszerzalny indeks obsługujący typy zakresowe, typy geometryczne, adresy IP i wyszukiwanie pełnotekstowe:

CREATE INDEX events_during_idx ON events USING GIST (during);
-- 'during' is a tstzrange — finds overlapping ranges efficiently.

CREATE INDEX places_location_idx ON places USING GIST (location);
-- PostGIS geometry — nearest neighbour, intersects.

Indeks GIN

Generalised Inverted Index — najlepszy dla wartości złożonych, w których każdy element może odpowiadać wielu wierszom:

CREATE INDEX articles_tags_gin ON articles USING GIN (tags);
-- tags is TEXT[]; query with @> or && operators

CREATE INDEX articles_doc_gin ON articles USING GIN (search_doc);
-- For tsvector full-text search

CREATE INDEX events_data_gin ON events USING GIN (data jsonb_path_ops);
-- For JSONB containment queries

Indeks BRIN

Block Range INdexes podsumowują zakresy wartości dla każdych N stron. Są niewielkie (kilobajty dla tabel o rozmiarze terabajtów), ale skuteczne tylko wtedy, gdy dane są fizycznie posortowane według indeksowanej kolumny:

CREATE INDEX events_ts_brin ON events USING BRIN (ts);
-- Excellent for append-only time-series tables.

Porównanie rozmiarów

Dla tabeli zawierającej miliard wierszy:

  • B-tree na kolumnie BIGINT: ~30 GB
  • BRIN na kolumnie TIMESTAMPTZ: ~1 MB

BRIN jest radykalnie mniejszy, ale przewyższa B-tree tylko w zapytaniach sekwencyjnych lub dotyczących posortowanych danych.

Wybór typu indeksu

Schemat wyboru:

  • Równość i zakres dla skalarnego typu danych → B-tree
  • Równość w ogromnym zbiorze wartości skalarnych → B-tree (Hash tylko po przeprowadzeniu pomiarów)
  • Tablice, JSONB lub wyszukiwanie pełnotekstowe → GIN
  • Typy zakresowe, geometria lub niedokładne wyszukiwanie tekstu → GiST
  • Ogromna, posortowana tabela tylko z dopisywaniem danych → BRIN

Kompromisy związane z GIN

GIN jest najszybszy w zapytaniach typu „znajdź wszystkie wiersze zawierające X”, ale wstawianie i aktualizowanie danych trwa dłużej niż w przypadku B-tree. W tabelach, w których często wykonywany jest zapis, warto rozważyć fastupdate=off, aby kontrolować listę oczekujących wpisów GIN.

Klasy operatorów

Każdy typ indeksu współpracuje z określonymi operatorami. JSONB używa jsonb_path_ops do tworzenia mniejszych i szybszych indeksów obsługujących wyłącznie operacje zawierania:

CREATE INDEX e_data_gin ON events USING GIN (data jsonb_path_ops);
-- Half the size of default jsonb_ops, supports @> only.

Indeksy złożone według typu

Indeksy złożone B-tree używają dopasowania od lewego prefiksu. Złożone indeksy GIN działają, ale są większe; zwykle tworzy się osobne indeksy GIN dla pojedynczych kolumn.

Podsumowanie

Typ indeksu należy dobrać do zapytania.

  • B-tree: domyślny
  • GIN: tablice, JSONB, wyszukiwanie pełnotekstowe
  • GiST: zakresy, geometria, niedokładne wyszukiwanie
  • BRIN: dane sekwencyjne, tabele tylko z dopisywaniem

Szybki test

Indeksowana jest kolumna TEXT[] używana w zapytaniach sprawdzających zawieranie wartości. Który typ indeksu będzie odpowiedni?

Często zadawane pytania

Czy lekcja „Indeksy B-tree a Hash a GiST a GIN” jest bezpłatna?

Tak — pełny tekst „Indeksy B-tree a Hash a GiST a GIN” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu SQL Academy, przejdź na CoddyKit PRO. Kurs SQL Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Indeksy B-tree a Hash a GiST a GIN”?

Porównywać główne typy indeksów w PostgreSQL i wybierać właściwy do zapytań sprawdzających równość, zakres, geometrię, JSON i pełnotekstowych Ćwiczysz SQL Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć SQL Academy?

Nie wymagamy żadnego doświadczenia. SQL Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.

Ile czasu zajmuje lekcja „Indeksy B-tree a Hash a GiST a GIN”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji SQL Academy?

Tak. Każda lekcja SQL Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Indeksy B-tree a Hash a GiST a GIN
  2. Indeksy złożone i kolejność kolumn
  3. Indeksy częściowe i indeksy wyrażeń
  4. Konserwacja indeksów i bloat
← Powrót do SQL Academy