Sobes.tech
Middle

Aké typy indexov existujú v PostgreSQL?

sobes.tech AI

Odpoveď od AI

Existujú nasledujúce základné typy indexov:

  1. B-strom (B-strom) - najbežnejší typ, vhodný pre väčšinu bežných dopytov (rovnosť, porovnanie, rozsah). Založený na vyváženom strome.

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

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

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

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

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

  7. 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 timestamp v 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ť.