B-tree-, Hash-, GiST- ja GIN-indeksit
Vertaa PostgreSQL:n tärkeimpiä indeksityyppejä ja valitse oikea indeksi yhtälö-, väli-, geometria-, JSON- ja kokotekstikyselyihin.
B-tree-, Hash-, GiST- ja GIN-indeksit on ilmainen SQL Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu SQL Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. SQL Academy-kurssilla on yhteensä 4 oppituntia.
Indeksityyppien yleiskatsaus
PostgreSQL:llä on useita indeksityyppejä, joista kukin on optimoitu erilaisille käyttötavoille:
- B-tree — yhtäsuuruus ja aluehaut (oletus)
- Hash — vain yhtäsuuruus
- GiST — geometria, kokotekstihaku, mukautetut tyypit
- GIN — yhdistelmäarvot (taulukot, JSONB, kokotekstihaku)
- BRIN — lohkoalueet — valtavat, järjestetyt taulut
- SP-GiST — tilan osittavat puut
B-tree: oletus
Käytössä 95 %:ssa tapauksista. Tukee operaattoreita =, <, <=, >, >=, BETWEEN ja ORDER BY:
CREATE INDEX users_email_idx ON users(email);
CREATE INDEX orders_created_at_idx ON orders(created_at DESC);Hash-indeksi
Vain yhtäsuuruushakuihin. Kaatumisenkestävä PG 10:stä alkaen. Pienempi ja hieman nopeampi kuin B-tree puhtaissa yhtäsuuruushauissa, mutta käyttöalue on hyvin kapea:
CREATE INDEX sessions_token_hash ON sessions USING HASH (token);
-- Useful for very high-cardinality equality lookups; usually B-tree is fine.GiST-indeksi
Generalised Search Tree — liitettävä rakenne, joka tukee alue-, geometria- ja IP-osoitetyyppejä sekä kokotekstihakua:
CREATE INDEX events_during_idx ON events USING GIST (during);
-- 'during' is a tstzrange — finds overlapping ranges efficiently.
CREATE INDEX places_location_idx ON places USING GIST (location);
-- PostGIS geometry — nearest neighbour, intersects.GIN-indeksi
Generalised Inverted Index — sopii parhaiten yhdistelmäarvoihin, joissa kukin alkio vastaa useita rivejä:
CREATE INDEX articles_tags_gin ON articles USING GIN (tags);
-- tags is TEXT[]; query with @> or && operators
CREATE INDEX articles_doc_gin ON articles USING GIN (search_doc);
-- For tsvector full-text search
CREATE INDEX events_data_gin ON events USING GIN (data jsonb_path_ops);
-- For JSONB containment queriesBRIN-indeksi
Block Range INdexes -indeksit tiivistävät arvoalueet N sivun jaksoilta. Ne ovat erittäin pieniä (teratavun tauluissa vain kilotavuja), mutta toimivat tehokkaasti vain, kun tiedot on fyysisesti järjestetty indeksoidun sarakkeen mukaan:
CREATE INDEX events_ts_brin ON events USING BRIN (ts);
-- Excellent for append-only time-series tables.Kokojen vertailu
Miljardin rivin taulussa:
- B-tree BIGINT-sarakkeella: noin 30 Gt
- BRIN TIMESTAMPTZ-sarakkeella: noin 1 Mt
BRIN on huomattavasti pienempi, mutta voittaa B-treen vain peräkkäisissä tai järjestetyissä kyselyissä.
Indeksityypin valitseminen
Valintaperiaate:
- Yhtäsuuruus ja aluehaut skalaarityypillä → B-tree
- Yhtäsuuruus valtavasta skalaariarvojen joukosta → B-tree (Hash vain mittaustulosten perusteella)
- Taulukot, JSONB ja kokotekstihaku → GIN
- Aluetyypit, geometria ja sumea tekstihaku → GiST
- Valtava järjestetty, vain lisäämiseen käytettävä taulu → BRIN
GIN-indeksin kompromissit
GIN on nopein "find all rows containing X" -kyselyissä, mutta INSERT- ja UPDATE-operaatiot ovat sillä hitaampia kuin B-treellä. Hyvin kirjoituskuormitteisissa tauluissa voitte harkita asetusta fastupdate=off GIN-indeksin odotuslistan hallintaan.
Operaattoriluokat
Kukin indeksityyppi toimii tiettyjen operaattoreiden kanssa. JSONB käyttää jsonb_path_ops -operaattoriluokkaa pienempiin ja nopeampiin, vain sisältöön perustuviin indekseihin:
CREATE INDEX e_data_gin ON events USING GIN (data jsonb_path_ops);
-- Half the size of default jsonb_ops, supports @> only.Yhdistelmäindeksit indeksityypeittäin
B-tree-yhdistelmäindeksit käyttävät vasemmanpuoleisimman etuliitteen täsmäytystä. GIN-yhdistelmäindeksit toimivat, mutta ovat suurempia; yleensä luodaan erilliset yksisarakkeiset GIN-indeksit.
Kertaus
Valitkaa indeksityyppi kyselyn mukaan.
- B-tree: oletus
- GIN: taulukot, JSONB ja kokotekstihaku
- GiST: alueet, geometria ja sumea haku
- BRIN: peräkkäinen käsittely ja vain lisäämiseen käytettävät taulut
Pikatarkistus
Indeksoitte TEXT[]-saraketta "contains"-hakuihin. Mikä indeksityyppi sopii tähän?
Opi SQL tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 46
- Oppitunnit
- 183
Usein kysytyt kysymykset
Onko oppitunti ”B-tree-, Hash-, GiST- ja GIN-indeksit” ilmainen?
Kyllä – oppitunnin ”B-tree-, Hash-, GiST- ja GIN-indeksit” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko SQL Academy-kurssin, päivitä CoddyKit PROhon. SQL Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”B-tree-, Hash-, GiST- ja GIN-indeksit”?
Vertaa PostgreSQL:n tärkeimpiä indeksityyppejä ja valitse oikea indeksi yhtälö-, väli-, geometria-, JSON- ja kokotekstikyselyihin. Harjoittelet SQL Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni SQL Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin SQL Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.
Kuinka kauan ”B-tree-, Hash-, GiST- ja GIN-indeksit”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä SQL Academy-oppitunnilla?
Kyllä. Jokainen SQL Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- B-tree-, Hash-, GiST- ja GIN-indeksit
- Yhdistelmäindeksit ja sarakkeiden järjestys
- Osittaiset indeksit ja lausekeindeksit
- Indeksien ylläpito ja paisuminen