Kokie indeksų tipai yra PostgreSQL?
sobes.tech AI
Atsakymas iš AI
Pagrindiniai indeksų tipai yra šie:
-
B-medis (B-medis) - dažniausiai naudojamas tipas, tinkamas daugumai įprastų užklausų (lygybė, palyginimas, diapazonas). Pagrįstas subalansuotu medžiu.
-
Hash (Hash) - naudojamas lygybei (=) patikrinti. Greitesnis nei B-medis tokioms užklausoms, bet nepalaiko palyginimų ir diapazonų. Laiko hash reikšmę rakto ir nuorodą į eilutę.
-
GiST (Generalized Search Tree) - bendras paieškos medžio struktūra, leidžianti kurti įvairius indeksus sudėtingiems duomenų tipams (geometriniai, tekstiniai su pilno teksto paieška). Pagrįstas subalansuotu medžiu.
-
SP-GiST (Space-Partitioned Generalized Search Tree) - specializuota GiST versija duomenims, kuriuos galima padalyti pagal erdvę (pvz., taškai, stačiakampiai). Pavyzdžiai: k-d medžiai, quadtree.
-
GIN (Generalized Inverted Index) - bendras inversinis indeksas, daugiausia naudojamas sudėtinių reikšmių elementų paieškai (pvz., masyvai, JSONB). Dažnai naudojamas pilno teksto paieškai.
-
BRIN (Block Range INdex) - bloko diapazono indeksas. Tinka labai didelėms lentelėms su natūraliai išrikiuotais duomenimis (pvz., pagal laiką). Indeksuoja fizinių blokų reikšmių diapazoną.
-
Bloom (Bloom filtras) - nėra tradicinis indeksas, o tikimybinė duomenų struktūra greitam elemento nebuvimo patikrinimui. Naudojamas greitam atrinkimui iš labai didelių lentelių, kai tiksli suderinamumas nereikalingas arba kaip papildomas filtras prieš pagrindinio indekso nuskaitymą.
Pavyzdžiai naudojimo:
- B-medis: indeksas skaitmeniniams laukams, datoms, eilutėms paieškai diapazone (
WHERE amount > 100). - Hash: retai naudojamas tiesiogiai, nes B-medis dažniausiai yra greitesnis.
- GiST: geografiniai indeksai (
gist(location)), indeksai pilno teksto paieškai (to_tsvector). - SP-GiST: indeksai dviejų matmenų duomenims (
spgist(point)). - GIN: indeksai masyvams (
gin(tags)), JSONB (gin(data)), pilno teksto paieškai. - BRIN: indeksas
timestamplaukui logų lentelėje, kur duomenys išrikiuoti pagal laiką. - Bloom: indeksas stulpelių rinkiniui (
bloom(col1, col2, col3)), greitai atmesti eilutes, kuriose tikrai nėra reikšmių derinio.
Indekso tipo pasirinkimas priklauso nuo stulpelio duomenų tipo ir užklausų, kurias reikia optimizuoti.