Sobes.tech
Middle

Jakie rodzaje indeksów istnieją w PostgreSQL?

sobes.tech AI

Odpowiedź od AI

Istnieją następujące główne typy indeksów:

  1. B-drzewo (B-drzewo) - najpowszechniejszy typ, odpowiedni dla większości typowych zapytań (równość, porównanie, zakres). Oparte na zrównoważonym drzewie.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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.

  7. 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 timestamp w 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.