Sobes.tech
Middle

Kādi indeksu veidi pastāv PostgreSQL?

sobes.tech AI

Atbilde no AI

Galvenie indeksu veidi ir šādi:

  1. B-koks (B-koks) - visizplatītākais veids, piemērots lielākajai daļai tipisku vaicājumu (vienādojums, salīdzinājumi, diapazons). Balstīts uz līdzsvarotu koku.

  2. Hash (Hash) - tiek izmantots vienādojuma (=) pārbaudē. Ātrāks nekā B-koks šādiem vaicājumiem, bet nepārstāv salīdzinājumus un diapazonus. Glabā atslēgas hash vērtību un norādi uz rindu.

  3. GiST (Generalized Search Tree) - vispārēja meklēšanas koka struktūra, ļauj veidot dažādus indeksus sarežģītiem datu tipiem (ģeometriskie, teksta ar pilna teksta meklēšanu). Balstīts uz līdzsvarotu koku.

  4. SP-GiST (Space-Partitioned Generalized Search Tree) - specializēta GiST versija datiem, kurus var sadalīt pēc telpas (piemēram, punkti, taisnstūri). Piemēri: k-d koki, quadtree.

  5. GIN (Generalized Inverted Index) - vispārējs invertēts indekss, galvenokārt izmanto sarežģītu vērtību elementu meklēšanai (piemēram, masīvi, JSONB). Bieži tiek izmantots pilna teksta meklēšanai.

  6. BRIN (Block Range INdex) - bloku diapazona indekss. Piemērots ļoti lielām tabulām ar dabīgi sakārtotiem datiem (piemēram, pēc laika). Indeksē fizisko bloku vērtību diapazonu.

  7. Bloom (Bloom filtra) - nav pilnīgi tradicionāls indekss, bet varat probabilistiska datu struktūra ātrai elementa neesamības pārbaudei. Izmanto ļoti lielu tabulu ātrai atlasei, ja precīza atbilstība nav nepieciešama vai kā papildu filtrs pirms galvenā indeksa skenēšanas.

Piemēri lietošanai:

  • B-koks: indekss skaitliskajiem laukiem, datumiem, virknes meklēšanai diapazonā (WHERE amount > 100).
  • Hash: reti tiek izmantots tieši, jo B-koks parasti ir ātrāks.
  • GiST: ģeogrāfiskie indeksi (gist(location)), indeksi pilna teksta meklēšanai (to_tsvector).
  • SP-GiST: divdimensiju datu indeksi (spgist(point)).
  • GIN: masīvu indeksi (gin(tags)), JSONB (gin(data)), pilna teksta meklēšana.
  • BRIN: indekss timestamp laukam logu tabulā, kur dati ir sakārtoti pēc laika.
  • Bloom: indekss kolonnu kopumam (bloom(col1, col2, col3)), lai ātri noraidītu rindas, kurās noteikti nav vērtību kombinācijas.

Indeksa veida izvēle ir atkarīga no kolonnas datu tipa un vaicājumu veida, kurus nepieciešams optimizēt.