Sobes.tech
Middle

Kokie indeksų tipai yra PostgreSQL?

sobes.tech AI

Atsakymas iš AI

Pagrindiniai indeksų tipai yra šie:

  1. B-medis (B-medis) - dažniausiai naudojamas tipas, tinkamas daugumai įprastų užklausų (lygybė, palyginimas, diapazonas). Pagrįstas subalansuotu medžiu.

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

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

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

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

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

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