Jaké typy indexů existují v PostgreSQL?
sobes.tech AI
Odpověď od AI
Existují následující hlavní typy indexů:
-
B-strom (B-strom) - nejrozšířenější typ, vhodný pro většinu typických dotazů (rovnost, porovnání, rozsah). Založen na vyváženém stromu.
-
Hash (Hashed) - používá se k ověření rovnosti (=). Je rychlejší než B-strom pro tyto dotazy, ale nepodporuje porovnání a rozsahy. Ukládá hash hodnotu klíče a ukazatel na řádek.
-
GiST (Generalized Search Tree) - zobecněná struktura vyhledávacího stromu, která umožňuje vytvářet různé indexy pro složité datové typy (geometrické, textové s fulltextovým vyhledáváním). Založen na vyváženém stromu.
-
SP-GiST (Space-Partitioned Generalized Search Tree) - specializovaná verze GiST pro data, která lze rozdělit podle prostoru (například body, obdélníky). Příklady: k-d stromy, quadtrees.
-
GIN (Generalized Inverted Index) - zobecněný invertovaný index, hlavně pro hledání prvků uvnitř složených hodnot (například pole, JSONB). Často používaný pro fulltextové vyhledávání.
-
BRIN (Block Range INdex) - index blokového rozsahu. Vhodný pro velmi velké tabulky s přirozeně seřazenými daty (například podle času). Indexuje rozsah hodnot v fyzických blocích disku.
-
Bloom (Bloom filtr) - není to tradiční index, ale pravděpodobnostní datová struktura pro rychlou kontrolu absence prvku. Používá se ke zrychlení výběru z velmi velkých tabulek, když není požadováno přesné shodování nebo jako doplňkový filtr před skenováním hlavního indexu.
Příklady použití:
- B-strom: index na číselných polích, datech, řetězcích pro hledání v rozsahu (
WHERE amount > 100). - Hash: zřídka se používá přímo, protože B-strom je obvykle rychlejší pro většinu úloh.
- GiST: geografické indexy (
gist(location)), indexy pro fulltextové vyhledávání (to_tsvector). - SP-GiST: indexy pro dvourozměrná data (
spgist(point)). - GIN: indexy pro pole (
gin(tags)), JSONB (gin(data)), fulltextové vyhledávání. - BRIN: index na poli
timestampv logovacích tabulkách, kde jsou data seřazena podle času. - Bloom: index na sadě sloupců (
bloom(col1, col2, col3)) pro rychlé vyloučení řádků, kde kombinace hodnot není přítomna.
Výběr typu indexu závisí na typu dat sloupce a na typu dotazů, které je třeba optimalizovat.