SQL Academy · Oppitunti

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.

Oppitunti 1/413 vaihetta

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 queries

BRIN-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?

Aloita maksutta

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

  1. B-tree-, Hash-, GiST- ja GIN-indeksit
  2. Yhdistelmäindeksit ja sarakkeiden järjestys
  3. Osittaiset indeksit ja lausekeindeksit
  4. Indeksien ylläpito ja paisuminen
← Takaisin: SQL Academy