SQL Academy · Lezione

Indici per le query più comuni

Aggiunga indici per le query eseguite più spesso, per utente, data o chiave esterna, e misuri l’impatto con EXPLAIN

Lezione 3 di 413 passaggi

Indici per le query più comuni è una lezione SQL Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento SQL Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso SQL Academy include 4 lezioni in totale.

Che cos'è un indice?

Un indice è una struttura dati separata su disco che consente al database di trovare le righe in base al valore di una colonna senza eseguire la scansione della tabella. L'implementazione classica è un B-tree.

Gli indici sacrificano la scrittura per la lettura

Ogni indice rende leggermente più lente le operazioni INSERT/UPDATE/DELETE (anche l'indice deve essere aggiornato). Non aggiunga indici che non servono.

Le chiavi primarie ricevono un indice automaticamente

Dichiarare PRIMARY KEY crea automaticamente un indice B-tree univoco. Lo stesso vale per le colonne UNIQUE.

Indicizzare le colonne delle chiavi esterne

PostgreSQL NON indicizza automaticamente il lato figlio di una FK. Ne aggiunga sempre una: in sua assenza, l'eliminazione di un record padre esegue la scansione di tutti i record figli:

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

Indicizzare le colonne usate in WHERE

Se filtra spesso per created_at, lo indicizzi:

CREATE INDEX posts_created_at_idx ON posts(created_at DESC);

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

Indici composti

Per i filtri su più colonne, un indice composto può essere molto più veloce di due indici su singole colonne:

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;

Regola del prefisso sinistro

Un indice composto (a, b, c) può servire WHERE a = ? e WHERE a = ? AND b = ?, ma NON WHERE b = ? da solo. L'ordine è importante.

Indici parziali

Indicizzi solo le righe che interroga:

-- 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.

Indici su espressioni

Indicizzi una funzione di una colonna:

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

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

Non indicizzare eccessivamente

Regole pratiche:

  • Indicizzi la PK ✓ (automatico)
  • Indicizzi le colonne UNIQUE ✓ (automatico)
  • Indicizzi le colonne FK ✓
  • Indicizzi le colonne usate in WHERE / JOIN / ORDER BY nelle query più frequenti
  • Non indicizzi colonne con selettività molto bassa (ad esempio un booleano con una distribuzione 50/50)

Misurare con EXPLAIN

Prima e dopo aver aggiunto un indice, esegua EXPLAIN ANALYZE per verificare che il planner lo utilizzi:

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

Riepilogo

Per il nostro blog: indicizzi le FK (post_id sui commenti, author_id su post e commenti) e (author_id, published_at DESC) nelle query per ottenere gli «ultimi post per utente».

Verifica rapida

Ha aggiunto una chiave esterna orders.user_id REFERENCES users(id). Quale indice, se necessario, dovrebbe creare?

Gratis per iniziare

Impara SQL con un tutor IA — gratis

Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.

Corsi
46
Lezioni
183

Domande Frequenti

La lezione «Indici per le query più comuni» è gratuita?

Sì — il testo completo di «Indici per le query più comuni» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso SQL Academy, passa a CoddyKit PRO. Il corso SQL Academy include 4 lezioni in totale.

Cosa imparerò in «Indici per le query più comuni»?

Aggiunga indici per le query eseguite più spesso, per utente, data o chiave esterna, e misuri l’impatto con EXPLAIN Eserciti SQL Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare SQL Academy?

Non è richiesta alcuna esperienza precedente. SQL Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «Indici per le query più comuni»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione SQL Academy?

Sì. Ogni lezione SQL Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Modellare un blog: utenti, post e commenti
  2. Scegliere chiavi e tipi
  3. Indici per le query più comuni
  4. Popolare il database con dati di test
← Torna a SQL Academy