Aké typy indexov existujú v PostgreSQL?
sobes.tech AI
Odpoveď od AI
Existujú nasledujúce základné typy indexov:
-
B-strom (B-strom) - najbežnejší typ, vhodný pre väčšinu bežných dopytov (rovnosť, porovnanie, rozsah). Založený na vyváženom strome.
-
Hash (Hash) - používa sa na kontrolu rovnosti (=). Rýchlejší ako B-strom pre takéto dopyty, ale nepodporuje porovnania a rozsahy. Ukladá hash-hodnotu kľúča a ukazovateľ na riadok.
-
GiST (Generalized Search Tree) - zovšeobecnená štruktúra vyhľadávacieho stromu, umožňuje vytvárať rôzne indexy pre zložité typy dát (geometrické, textové s plnotextovým vyhľadávaním). Založený na vyváženom strome.
-
SP-GiST (Space-Partitioned Generalized Search Tree) - špecializovaná verzia GiST pre dáta, ktoré možno rozdeliť podľa priestoru (napríklad body, obdĺžniky). Príklady: k-d stromy, quadtree.
-
GIN (Generalized Inverted Index) - zovšeobecnený invertovaný index, hlavne pre vyhľadávanie prvkov v zložených hodnotách (napríklad polia, JSONB). Často sa používa pre plnotextové vyhľadávanie.
-
BRIN (Block Range INdex) - index rozsahu blokov. Vhodný pre veľmi veľké tabuľky s prirodzene zoradenými dátami (napríklad podľa času). Indexuje rozsah hodnôt v fyzických blokoch disku.
-
Bloom (Bloom filter) - nie úplne tradičný index, skôr pravdepodobnostná štruktúra dát pre rýchlu kontrolu neprítomnosti prvku. Používa sa na zrýchlenie výberu z veľmi veľkých tabuliek, keď presné zhodovanie nie je potrebné alebo ako doplnkový filter pred prehľadávaním hlavného indexu.
Príklady použitia:
- B-strom: Index na číselných poliach, dátumoch, reťazcoch pre vyhľadávanie v rozsahu (
WHERE amount > 100). - Hash: Zriedka sa používa priamo, pretože B-strom je zvyčajne rýchlejší pre väčšinu úloh.
- GiST: Geografické indexy (
gist(location)), indexy pre plnotextové vyhľadávanie (to_tsvector). - SP-GiST: Indexy pre dvojrozmerné dáta (
spgist(point)). - GIN: Indexy pre polia (
gin(tags)), JSONB (gin(data)), plnotextové vyhľadávanie. - BRIN: Index na poli
timestampv tabuľke logov, kde sú dáta zoradené podľa času. - Bloom: Index na súbore stĺpcov (
bloom(col1, col2, col3)) pre rýchle odfiltrovanie riadkov, kde kombinácia hodnôt určite nie je prítomná.
Výber typu indexu závisí od typu dát stĺpca a druhu dopytov, ktoré je potrebné optimalizovať.