Lunttilappu SQL-indeksityypeistä, suunnittelumalleista ja ylläpidosta.
Indeksit vaihtavat tallennustilaa ja kirjoitusnopeutta lukunopeuteen. Valitse rakenne, rajaa rivit ja hallitse turvotusta.
Viitetaulukko · 31 merkintää
SQL-indeksointiExplained
31 of 31 rows
Indeksityypit
Tasapainotettu puu yhtäsuuruus-, haarukka- ja lajitteluhakuihin. Oletus useimmissa tietokannoissa.
Käytä operaattoreihin =, <, >, BETWEEN, ORDER BY. Älä täystekstihakuun.
Indeksi, jonka lehtitaso on itse taulu. Rivit tallennetaan avainjärjestyksessä. Yksi per taulu.
InnoDB klusteroi ensisijaisen avaimen mukaan. SQL Server -taulut ilman sitä ovat kekoja (heap).
Erillinen rakenne, joka sisältää avaimet ja osoittimen perustauluun. Monta per taulu.
Keossa se tallentaa rivitunnuksen. Klusteroidussa taulussa se tallentaa klusterointiavaimen.
Hajautustaulu vain yhtäsuuruushakuihin. Tarkka osuma vakioajassa.
Käytä vain = -operaatioihin; haarukat ja järjestys vaativat B-treen. SQL Serverin muistiin optimoitu hash tarvitsee bucket count -arvon lähelle rivimäärää.
Generalized Inverted Index. Kuvaa arvot riveihin. Tehty taulukoille ja täystekstille.
Käytä jsonb:hen, taulukoihin, tsvectoriin ja trigramihakuun. Hitaampi rakentaa kuin B-tree.
Generalized Search Tree. Laajennettavissa ei-skaalareille tyypeille ja päällekkäisyyskyselyille.
Käytä geometrisiin haarukoihin, kNN-hakuihin ja poissulkurajoitteisiin. pg_trgm nopeuttaa LIKEä.
Tilaosiottava GiST. Jakaa datan päällekkäättömiin alueisiin radix- tai quadpuilla.
Käytä pisteisiin, IP-etuliitteisiin ja etuliitehakuihin. Ei päällekkäisyyksiin; käytä GiSTiä.
Block Range Index. Tallentaa min/max-lohkoalueittain. Hyvin pieni jalanjälki.
Käytä suurissa fyysisesti lajitelluissa tauluissa. Halpa rakentaa, heikko selektiivisyys.
Indeksi, joka on tallennettu sarakesegmentteinä rivien sijaan. Korkea pakkausteho, eräsuoritus.
Käytä analyyttisiin luentoihin monen rivin ja harvan sarakkeen yli. Yksittäisten rivien haut ovat hitaita.
Erillinen käänteinen sanaindeksi MySQL:ssä ja SQL Serverissä. Rakennetaan tekstisaraketta kohden.
Käytä MATCH AGAINST- tai CONTAINS-lauseita. Postgresin täysteksti käyttää sen sijaan GINiä tsvectorilla.
Oraclen indeksi, joka tallentaa yhden bitmapin kutakin erillistä arvoa kohden. Jokainen bitti merkitsee yhtä riviä.
Käytä matalakardinaliteettisissa sarakkeissa lukupainotteisissa tietovarastoissa. Samanaikaiset kirjoitukset sarjoittuvat bitmapia kohden.
DESC-määritteinen indeksisarake. Kyseisen sarakkeen avaimet tallennetaan käänteisessä järjestyksessä.
Tarvitaan sekalajitteluun kuten (a ASC, b DESC). Pelkät DESC-lajittelut voivat myös lukea tavallisen indeksin takaperin.
MySQL 8 -indeksi, jonka optimoija ohittaa. Ylläpidetään silti jokaisessa kirjoituksessa.
Piilota indeksi ennen poistoa vaikutuksen testaamiseksi. Tee siitä uudelleen näkyvä ilman uudelleenrakennusta.
Suunnittelu
Monisarakkeinen indeksi. Johtavien sarakkeiden on vastattava kyselyn suodatinjärjestystä.
Laita yhtäsuuruus ensin, sitten haarukka. Kaksi yksittäistä indeksiä ei korvaa yhtä yhdistelmäindeksiä.
Indeksi WHERE-ehtoon. SQL Server kutsuu sitä suodatetuksi indeksiksi (filtered index). Kattaa vain sopivat rivit.
Indeksoi vain active='t' -rivit. Puolittaa koon ja kirjoituskustannuksen.
B-tree ylimääräisillä ei-avainsarakkeilla. Vain indeksiin perustuvat luennot välttävät kekoluennot.
Lisää usein haetut sarakkeet INCLUDE-listaan. Pitää indeksin lajiteltavana.
Indeksi, joka kieltää päällekkäiset arvot. Hylkää törmäävät lisäykset.
Käytä luonnollisille avaimille ja yhteen yhteen -rajoitteille. UNIQUE NULL sallii monta NULLia.
Indeksi, joka on rakennettu sarakkeiden funktiolle eikä sarakkeille itselleen.
Indeksoi lower(email) tai date_trunc('day', created_at). Kyselyn on toistettava täsmälleen sama lauseke.
Operaattoriluokka. Määrittää, miten indeksi vertaa ja tallentaa yhden sarakkeen tyypin.
Aseta varchar_pattern_ops LIKE 'abc%' -hakuun ilman kirjainkoon muunnosta. Oletukset sopivat yhtäsuuruuteen ja haarukoihin.
Suunnitelma, joka vastaa kyselyyn pelkillä indeksisivuilla. Kekkoa ei koskaan lueta.
Vaatii jokaisen haetun sarakkeen indeksiin tai INCLUDE-listaan. Vacuum pitää näkyvyyskartan ajan tasalla.
Viiteavainsarakkeet eivät saa automaattista indeksiä viittaavaan tauluun.
Indeksoi jokainen viiteavainsarake, jolla liität tai poistat. Kaskadipoistot skannaavat lapsitaulun ilman sitä.
Ylläpito
Suunnitelmatarkastaja. Näyttää peräkkäisskannaukset, indeksivalinnat ja kustannusarviot.
Käytä EXPLAIN (ANALYZE, BUFFERS) -muotoa. Seq Scan 10 miljoonan rivin taulussa tarkoittaa puuttuvaa indeksiä.