Sobes.tech
Middle

Koje vrste indeksa postoje u PostgreSQL?

sobes.tech АИ

Одговор од АИ

Postoje sledeće osnovne vrste indeksa:

  1. B-stablo (B-drvo) - najčešće korišćen tip, pogodan za većinu tipičnih upita (jednakost, poređenje, opseg). Osnovano na uravnoteženom stablu.

  2. Hash (Hash) - koristi se za proveru jednakosti (=). Brže od B-stabla za takve upite, ali ne podržava poređenja i opsege. Čuva hash-vrednost ključa i pokazivač na red.

  3. GiST (Generalized Search Tree) - generalizovana struktura stabla pretrage, omogućava pravljenje različitih indeksa za složene tipove podataka (geometrijski, tekstualni sa punim tekstom). Osnovano na uravnoteženom stablu.

  4. SP-GiST (Space-Partitioned Generalized Search Tree) - specijalizovana verzija GiST za podatke koji se mogu podeliti po prostoru (npr. tačke, pravougaonici). Primeri: k-d stabla, kvadtree.

  5. GIN (Generalized Inverted Index) - generalizovani inverzni indeks, uglavnom za pretraživanje elemenata unutar složenih vrednosti (npr. nizovi, JSONB). Često se koristi za pun tekst pretragu.

  6. BRIN (Block Range INdex) - indeks opsega blokova. Pogodan za veoma velike tabele sa prirodno sortiranim podacima (npr. po vremenu). Indeksira opseg vrednosti u fizičkim blokovima diska.

  7. Bloom (Bloom filter) - nije baš tradicionalni indeks, već verovatnosna struktura podataka za brzu proveru odsustva elementa. Koristi se za ubrzanje odabira iz veoma velikih tabela, kada tačno poklapanje nije potrebno ili kao dodatni filter pre pretraživanja glavnog indeksa.

Primeri upotrebe:

  • B-stablo: Indeks po numeričkim poljima, datumima, stringovima za pretraživanje po opsegu (WHERE amount > 100).
  • Hash: Retko se koristi direktno, jer je B-stablo obično brže za većinu zadataka.
  • GiST: Geografski indeksi (gist(location)), indeksi za pun tekst pretragu (to_tsvector).
  • SP-GiST: Indeksi za dvodimenzionalne podatke (spgist(point)).
  • GIN: Indeksi za nizove (gin(tags)), JSONB (gin(data)), pun tekst pretragu.
  • BRIN: Indeks po polju timestamp u tabeli logova, gde su podaci sortirani po vremenu.
  • Bloom: Indeks po skupu kolona (bloom(col1, col2, col3)) za brzo odbacivanje redova gde kombinacija vrednosti sigurno nije prisutna.

Izbor tipa indeksa zavisi od tipa podataka kolone i vrste upita koje je potrebno optimizovati.