Jakie rodzaje indeksów istnieją w PostgreSQL?
sobes.tech AI
Odpowiedź od AI
Istnieją następujące główne typy indeksów:
-
B-drzewo (B-drzewo) - najpowszechniejszy typ, odpowiedni dla większości typowych zapytań (równość, porównanie, zakres). Oparte na zrównoważonym drzewie.
-
Hash (Hash) - używany do sprawdzania równości (=). Szybszy niż B-drzewo dla takich zapytań, ale nie obsługuje porównań i zakresów. Przechowuje wartość hash klucza i wskaźnik na wiersz.
-
GiST (Uogólnione Drzewo Wyszukiwania) - uogólniona struktura drzewa wyszukiwania, pozwalająca na tworzenie różnych indeksów dla złożonych typów danych (geometryczne, tekstowe z wyszukiwaniem pełnotekstowym). Oparte na zrównoważonym drzewie.
-
SP-GiST (Przestrzeń-Partitioned Generalized Search Tree) - wyspecjalizowana wersja GiST dla danych, które można podzielić według przestrzeni (np. punkty, prostokąty). Przykłady: drzewa k-d, quadtrees.
-
GIN (Uogólniony Odwrócony Indeks) - uogólniony indeks odwrócony, głównie do wyszukiwania elementów wewnątrz wartości złożonych (np. tablice, JSONB). Często używany do wyszukiwania pełnotekstowego.
-
BRIN (Indeks Zakresu Bloków) - indeks zakresu bloków. Odpowiedni dla bardzo dużych tabel z naturalnie uporządkowanymi danymi (np. według czasu). Indeksuje zakres wartości w fizycznych blokach dysku.
-
Bloom (Filtr Bloom) - nie jest to tradycyjny indeks, lecz probabilistyczna struktura danych do szybkiego sprawdzania braku elementu. Używany do przyspieszania wyboru z bardzo dużych tabel, gdy nie jest wymagana dokładna zgodność lub jako filtr przed skanowaniem głównego indeksu.
Przykłady zastosowania:
- B-drzewo: indeks na polach numerycznych, datach, łańcuchach do wyszukiwania zakresowego (
WHERE amount > 100). - Hash: rzadko używany bezpośrednio, ponieważ B-drzewo jest zwykle szybsze dla większości zadań.
- GiST: indeksy geograficzne (
gist(location)), indeksy do wyszukiwania pełnotekstowego (to_tsvector). - SP-GiST: indeksy dla danych dwuwymiarowych (
spgist(point)). - GIN: indeksy dla tablic (
gin(tags)), JSONB (gin(data)), wyszukiwanie pełnotekstowe. - BRIN: indeks na polu
timestampw tabelach logów, gdzie dane są uporządkowane według czasu. - Bloom: indeks na zestawie kolumn (
bloom(col1, col2, col3)) do szybkiego odrzucania wierszy, w których nie występuje kombinacja wartości.
Wybór typu indeksu zależy od typu danych kolumny i rodzaju zapytań, które mają być zoptymalizowane.