Indekser for vanlige spørringer
Legg til indekser for spørringene De kjører oftest: etter bruker, dato og fremmednøkkel, og mål effekten med EXPLAIN.
Indekser for vanlige spørringer er en gratis leksjon i SQL Academy på CoddyKit. Dette er leksjon 3 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i SQL Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i SQL Academy inneholder totalt 4 leksjoner.
Hva er en indeks?
En indeks er en separat datastruktur på disken som lar databasen finne rader etter kolonneverdi uten å skanne tabellen. Den klassiske implementasjonen er et B-tre.
Indekser bytter skriveytelse mot leseytelse
Hver indeks gjør INSERT/UPDATE/DELETE litt tregere (indeksen må også oppdateres). Ikke legg til indekser De ikke trenger.
Primærnøkler får en indeks uten ekstra arbeid
Å deklarere PRIMARY KEY oppretter automatisk en unik B-tre-indeks. Det samme gjelder kolonner med UNIQUE.
Indekser fremmednøkkelkolonner
PostgreSQL indekserer IKKE automatisk barnsiden av en FK. Legg alltid til en indeks – uten den må sletting av en forelder skanne alle barn:
CREATE INDEX comments_post_id_idx ON comments(post_id);
CREATE INDEX comments_author_id_idx ON comments(author_id);Indekser kolonner som brukes i WHERE
Hvis De ofte filtrerer på created_at, bør De indeksere den:
CREATE INDEX posts_created_at_idx ON posts(created_at DESC);
-- Query benefits:
SELECT * FROM posts ORDER BY created_at DESC LIMIT 20;Sammensatte indekser
For filtre med flere kolonner kan en sammensatt indeks være mye raskere enn to enkeltkolonneindekser:
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;Regelen om venstreprefiks
En sammensatt indeks (a, b, c) kan brukes for WHERE a = ? og WHERE a = ? AND b = ? – men IKKE alene for WHERE b = ?. Rekkefølgen er viktig.
Partielle indekser
Indekser bare radene De spør etter:
-- 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.Uttrykksindekser
Indekser resultatet av en funksjon på en kolonne:
CREATE INDEX users_email_lower_idx ON users(LOWER(email));
-- Query that uses it:
SELECT * FROM users WHERE LOWER(email) = LOWER($1);Ikke bruk for mange indekser
Tommelfingerregler:
- Indekser PK ✓ (automatisk)
- Indekser UNIQUE-kolonner ✓ (automatisk)
- Indekser FK-kolonner ✓
- Indekser kolonner som brukes i WHERE / JOIN / ORDER BY i de mest brukte spørringene
- Ikke indekser kolonner med svært lav selektivitet (for eksempel en boolsk kolonne med 50/50-fordeling)
Mål med EXPLAIN
Før og etter at De legger til en indeks, bør De kjøre EXPLAIN ANALYZE for å kontrollere at spørringsplanleggeren bruker den:
EXPLAIN ANALYZE
SELECT * FROM posts WHERE author_id = 42 ORDER BY published_at DESC LIMIT 10;Oppsummering
For bloggen vår: indekser FK-ene (post_id på kommentarer, author_id på innlegg og kommentarer) og (author_id, published_at DESC) på innlegg for spørringer som finner «nyeste innlegg fra bruker».
Rask kontroll
De har lagt til en fremmednøkkel orders.user_id REFERENCES users(id). Hvilken indeks bør De eventuelt opprette?
Lær deg SQL med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 46
- Leksjoner
- 183
Ofte stilte spørsmål
Er leksjonen «Indekser for vanlige spørringer» gratis?
Ja – hele teksten i «Indekser for vanlige spørringer» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av SQL Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i SQL Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Indekser for vanlige spørringer»?
Legg til indekser for spørringene De kjører oftest: etter bruker, dato og fremmednøkkel, og mål effekten med EXPLAIN. Du øver på SQL Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med SQL Academy?
Ingen tidligere erfaring er nødvendig. SQL Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.
Hvor lang tid tar leksjonen «Indekser for vanlige spørringer»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne SQL Academy-leksjonen?
Ja. Alle SQL Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Modellering av en blogg: brukere, innlegg og kommentarer
- Valg av nøkler og typer
- Indekser for vanlige spørringer
- Fylle databasen med testdata