Sobes.tech
Middle

Jaké typy indexů existují v PostgreSQL?

sobes.tech AI

Odpověď od AI

Existují následující hlavní typy indexů:

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

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

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

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

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

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

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