SQL Academy · Oppitunti

Indeksit yleisiä kyselyitä varten

Lisätkää indeksit useimmin suoritettaville kyselyille: käyttäjän, päivämäärän ja viiteavaimen mukaan, ja mitatkaa vaikutus EXPLAINilla.

Oppitunti 3/413 vaihetta

Indeksit yleisiä kyselyitä varten on ilmainen SQL Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/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.

Mikä on indeksi?

Indeksi on erillinen levyllä sijaitseva tietorakenne, jonka avulla tietokanta voi etsiä rivejä sarakearvon perusteella ilman koko taulun läpikäyntiä. Perinteinen toteutus on B-puu.

Indeksit vaihtavat kirjoitussuorituskykyä lukusuorituskykyyn

Jokainen indeksi hidastaa INSERT-, UPDATE- ja DELETE-toimintoja hieman, koska myös indeksi on päivitettävä. Älkää lisätkö tarpeettomia indeksejä.

Perusavaimet saavat indeksin automaattisesti

PRIMARY KEY luo automaattisesti yksikäsitteisen B-puuindeksin. Sama koskee UNIQUE-sarakkeita.

Indeksoikaa vierasavainsarakkeet

PostgreSQL EI indeksoi vierasavaimen lapsipuolta automaattisesti. Lisätkää indeksi aina — ilman sitä ylärivin poistaminen käy läpi kaikki alirivit:

CREATE INDEX comments_post_id_idx ON comments(post_id);
CREATE INDEX comments_author_id_idx ON comments(author_id);

Indeksoikaa WHERE-lauseissa käytettävät sarakkeet

Jos suodatatte usein sarakkeen created_at perusteella, indeksoikaa se:

CREATE INDEX posts_created_at_idx ON posts(created_at DESC);

-- Query benefits:
SELECT * FROM posts ORDER BY created_at DESC LIMIT 20;

Yhdistelmäindeksit

Usean sarakkeen suodatuksessa yhdistelmäindeksi voi olla huomattavasti nopeampi kuin kaksi yksittäistä indeksiä:

CREATE INDEX posts_author_published_idx
  ON posts(author_id, published_at DESC);

-- This query uses the index for both filter and sort:
SELECT * FROM posts
WHERE author_id = 42
ORDER BY published_at DESC LIMIT 10;

Vasemman etuliitteen sääntö

Yhdistelmäindeksi (a, b, c) voi palvella kyselyitä WHERE a = ? ja WHERE a = ? AND b = ? — mutta EI kyselyä WHERE b = ? yksinään. Järjestyksellä on merkitystä.

Osittaiset indeksit

Indeksoikaa vain rivit, joita kyselyissä käytetään:

-- Only published posts:
CREATE INDEX posts_published_idx
  ON posts(published_at DESC)
  WHERE published_at IS NOT NULL;

-- Smaller index, faster lookups for the common case.

Lausekeindeksit

Indeksoikaa sarakkeesta laskettava funktion arvo:

CREATE INDEX users_email_lower_idx ON users(LOWER(email));

-- Query that uses it:
SELECT * FROM users WHERE LOWER(email) = LOWER($1);

Älkää indeksoiko liikaa

Nyrkkisäännöt:

  • Indeksoikaa PK ✓ (automaattisesti)
  • Indeksoikaa UNIQUE-sarakkeet ✓ (automaattisesti)
  • Indeksoikaa vierasavainsarakkeet ✓
  • Indeksoikaa sarakkeet, joita käytetään tärkeimpien kyselyiden WHERE-, JOIN- tai ORDER BY -lauseissa
  • Älkää indeksoiko sarakkeita, joiden selektiivisyys on erittäin pieni (esimerkiksi boolean-saraketta, jonka arvot jakautuvat suhteessa 50/50)

Mitatkaa EXPLAIN-toiminnolla

Suorittakaa EXPLAIN ANALYZE ennen indeksin lisäämistä ja sen jälkeen varmistaaksenne, että kyselysuunnittelija käyttää sitä:

EXPLAIN ANALYZE
SELECT * FROM posts WHERE author_id = 42 ORDER BY published_at DESC LIMIT 10;

Kertaus

Blogissamme indeksoikaa vierasavaimet (post_id kommenteissa sekä author_id julkaisuissa ja kommenteissa) ja (author_id, published_at DESC) julkaisuissa käyttäjän uusimpia julkaisuja hakevia kyselyitä varten.

Pikatarkistus

Lisäsitte vierasavaimen orders.user_id REFERENCES users(id). Minkä indeksin, jos minkään, luotte?

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 ”Indeksit yleisiä kyselyitä varten” ilmainen?

Kyllä – oppitunnin ”Indeksit yleisiä kyselyitä varten” 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 ”Indeksit yleisiä kyselyitä varten”?

Lisätkää indeksit useimmin suoritettaville kyselyille: käyttäjän, päivämäärän ja viiteavaimen mukaan, ja mitatkaa vaikutus EXPLAINilla. 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 3/4.

Kuinka kauan ”Indeksit yleisiä kyselyitä varten”-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. Blogin mallintaminen: käyttäjät, julkaisut, kommentit
  2. Avainten ja tietotyyppien valinta
  3. Indeksit yleisiä kyselyitä varten
  4. Tietokannan alustaminen testidatalla
← Takaisin: SQL Academy