Millised indeksitüübid on PostgreSQL-is olemas?
sobes.tech AI
Vastus AI-lt
Põhiliigid indeksid on järgmised:
-
B-puu (B-puu) - kõige levinum tüüp, sobib enamiku tüüpiliste päringute jaoks (võrdsus, võrdlus, vahemik). Põhineb tasakaalustatud puul.
-
Hash (Hash) - kasutatakse võrdluse (=) kontrollimiseks. Kiirem kui B-puu selliste päringute jaoks, kuid ei toeta võrdlusi ja vahemikke. Hoiab hash-väärtust võtme ja viitena rida.
-
GiST (Generalized Search Tree) - üldine otsingupuu struktuur, võimaldab luua erinevaid indekseid keerukatele andmetüüpidele (geomeetrilised, tekstilised koos täistekstiga otsinguga). Põhineb tasakaalustatud puul.
-
SP-GiST (Space-Partitioned Generalized Search Tree) - spetsialiseeritud GiST-versioon andmetele, mida saab jagada ruumi järgi (näiteks punktid, ristkülikud). Näited: k-d puud, quadtree.
-
GIN (Generalized Inverted Index) - üldine pööratud indeks, peamiselt kasutatav keerukate väärtuste elementide otsimiseks (näiteks massiivid, JSONB). Sageli kasutatakse täisteksti otsinguks.
-
BRIN (Block Range INdex) - ploki vahemiku indeks. Sobib väga suurtele tabelitele, mille andmed on loomulikult järjestatud (näiteks aja järgi). Indekseerib füüsiliste plokkide väärtuste vahemiku.
-
Bloom (Bloom filter) - ei ole päris traditsiooniline indeks, vaid tõenäosuslik struktuur kiireks elemendi puudumise kontrollimiseks. Kasutatakse väga suurte tabelite kiireks valikuks, kui täpne vaste ei ole vajalik või kui täiendav filter enne põhindeksi skannimist.
Kasutusnäited:
- B-puu: indeks numbrilistele väljadele, kuupäevadele, stringidele vahemiku otsimiseks (
WHERE amount > 100). - Hash: harva kasutatakse otse, kuna B-puu on tavaliselt kiirem.
- GiST: geograafilised indeksid (
gist(location)), täisteksti otsingu indeksid (to_tsvector). - SP-GiST: kahemõõtmeliste andmete indeksid (
spgist(point)). - GIN: massiivide indeksid (
gin(tags)), JSONB (gin(data)), täisteksti otsing. - BRIN: indeks
timestampväljal logi tabelis, kus andmed on järjestatud aja järgi. - Bloom: indeks veergude kogumile (
bloom(col1, col2, col3)), et kiiresti välistada read, kus väärtuste kombinatsioon on kindlasti puudulik.
Indeksi tüübi valik sõltub veeru andmetüübist ja päringute tüübist, mida on vaja optimeerida.