Leggere EXPLAIN ed EXPLAIN ANALYZE
Legga l’albero del piano, comprenda la differenza tra costo e tempo effettivo e individui i nodi più pesanti.
Leggere EXPLAIN ed EXPLAIN ANALYZE è una lezione SQL Academy gratuita su CoddyKit. Questa è la lezione 1 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.
Perché EXPLAIN?
EXPLAIN mostra la strategia del pianificatore per eseguire una query, senza eseguirla. EXPLAIN ANALYZE esegue la query E mostra i tempi effettivi.
EXPLAIN di base
Mostri il piano stimato:
EXPLAIN SELECT * FROM orders WHERE user_id = 42;
-- QUERY PLAN
-- ---------------------------------------------------------------
-- Index Scan using orders_user_id_idx on orders
-- (cost=0.43..8.45 rows=5 width=120)
-- Index Cond: (user_id = 42)EXPLAIN ANALYZE
Esegue la query e aggiunge i tempi effettivi e i conteggi reali delle righe:
EXPLAIN ANALYZE SELECT * FROM orders WHERE user_id = 42;
-- Index Scan using orders_user_id_idx on orders
-- (cost=0.43..8.45 rows=5 width=120)
-- (actual time=0.041..0.043 rows=4 loops=1)
-- Planning Time: 0.082 ms
-- Execution Time: 0.057 msLeggere l'albero
I piani sono alberi. Il rientro indica il nodo figlio. I nodi figli vengono eseguiti prima dei nodi padre.
Aggregate
-> Hash Join
Hash Cond: (o.user_id = u.id)
-> Seq Scan on orders
-> Hash
-> Seq Scan on usersCosto rispetto al tempo
La colonna cost contiene DUE numeri: startup_cost..total_cost. Sono unità arbitrarie del pianificatore, non secondi. Usi actual time per i valori reali.
rows = stimato; actual rows = reale
rows è la stima del pianificatore. actual rows indica ciò che è realmente accaduto. Se i due valori sono molto diversi, le statistiche non sono corrette.
I loop moltiplicano il tempo
Per i loop annidati, actual time=X loops=N significa che ogni iterazione ha richiesto X; il tempo totale per nodo è X×N.
Nested Loop (actual time=0.05..2.03 rows=500)
-> Seq Scan on orders (actual ... loops=1)
-> Index Scan using users_pkey (actual time=0.01..0.01 loops=500)BUFFERS indica l'I/O
EXPLAIN (ANALYZE, BUFFERS) segnala gli hit e le letture dei buffer, ovvero l'I/O alla base delle tempistiche:
EXPLAIN (ANALYZE, BUFFERS) SELECT ...;
-- Buffers: shared hit=12 read=4Opzioni di FORMAT
Per l'elaborazione programmatica, utilizzi JSON o YAML:
EXPLAIN (ANALYZE, FORMAT JSON) SELECT ...;Non usi EXPLAIN ANALYZE su istruzioni distruttive
EXPLAIN ANALYZE su un'istruzione UPDATE/DELETE/INSERT la esegue realmente. La racchiuda in una transazione con ROLLBACK se desidera esaminarla senza eseguire il commit:
BEGIN;
EXPLAIN ANALYZE DELETE FROM orders WHERE ...;
ROLLBACK;Nodi di piano comuni
- Seq Scan — legge l'intera tabella
- Index Scan — utilizza un indice
- Bitmap Heap Scan — combina più indici
- Hash Join / Merge Join / Nested Loop — strategie di join
- Sort, Aggregate, Limit, Materialize
Procedura per leggere un piano
- Esegua EXPLAIN ANALYZE sulla query lenta
- Individui il nodo con il valore più alto di
actual time - Confronti
rowsstimato conactual rows - Verifichi se gli indici vengono utilizzati
- Ripeta il ciclo: aggiunga un indice, riscriva la query o esegua ANALYZE
Riepilogo
EXPLAIN ANALYZE è il principale strumento per le prestazioni.
- Il costo è relativo, il tempo è reale
- La differenza tra righe stimate ed effettive rivela problemi nelle statistiche
- BUFFERS mostra l'I/O
- Racchiuda le query distruttive tra BEGIN e ... ROLLBACK
Verifica rapida
Qual è la differenza tra EXPLAIN ed EXPLAIN ANALYZE?
Domande Frequenti
La lezione «Leggere EXPLAIN ed EXPLAIN ANALYZE» è gratuita?
Sì — il testo completo di «Leggere EXPLAIN ed EXPLAIN ANALYZE» è 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 «Leggere EXPLAIN ed EXPLAIN ANALYZE»?
Legga l’albero del piano, comprenda la differenza tra costo e tempo effettivo e individui i nodi più pesanti. 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 1 di 4.
Quanto tempo richiede la lezione «Leggere EXPLAIN ed EXPLAIN ANALYZE»?
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
- Leggere EXPLAIN ed EXPLAIN ANALYZE
- Scansioni sequenziali e scansioni tramite indice
- Hash Join, Merge Join e Nested Loop
- Individuare e correggere le query lente