Diagnosticare una query SQL lenta a partire dal suo EXPLAIN ANALYZE
Leggi nodo per nodo il piano di esecuzione di una query SQL lenta, trova il collo di bottiglia e ottieni indici o riscritture concrete con il loro costo sulle scritture. Pensato per ChatGPT, Claude, Gemini e Microsoft Copilot. Include 5 variabili personalizzabili e puoi copiarlo gratuitamente con un clic.
Avanzato · Codice · In attesa di revisione editoriale
Prompt
Agisci come DBA ed esperto di prestazioni di {{motore}}.
Ho una query lenta. Ecco i dati:
- Query:
{{query}}
- Output di EXPLAIN (idealmente EXPLAIN ANALYZE con BUFFERS, o FORMAT=TREE):
{{piano}}
- Tabelle, indici esistenti e numero approssimativo di righe: {{schema}}
- Frequenza di esecuzione e tempo accettabile: {{contesto}}
Consegna:
1. Una lettura del piano in linguaggio chiaro, dal nodo più interno verso l’esterno: cosa fa ogni nodo, righe stimate e reali, tempo che consuma.
2. Il collo di bottiglia principale e quelli secondari, con la prova presa dal piano (scansione sequenziale, stime molto sbagliate, ordinamento su disco, nested loop su molte righe, filtro applicato tardi, funzione su colonna indicizzata, ecc.).
3. Correzioni ordinate per impatto atteso e sforzo:
- Indici con il `CREATE INDEX` esatto (ordine delle colonne motivato, indici parziali o di copertura se utili, creazione senza blocchi quando il motore lo consente).
- Una riscrittura della query se migliora il piano (per esempio `EXISTS` invece di `IN`, paginazione per chiave, evitare `OR` su colonne diverse).
- Statistiche o configurazione (ANALYZE, statistiche estese, memoria di lavoro) solo se il piano lo giustifica.
4. Il costo di ogni indice: spazio, impatto su INSERT/UPDATE e se duplica un indice esistente.
5. La verifica: cosa rieseguire e quale cambiamento deve comparire nel piano.
Vincoli:
- Basa ogni conclusione sul piano; non promettere miglioramenti in percentuale o in millisecondi.
- Se ho solo EXPLAIN senza ANALYZE, o mancano dettagli sullo schema, dimmelo e chiedimeli prima di consigliare indici.
- Avvisami se un’azione blocca tabelle in produzione.Come usarlo
- Esegui EXPLAIN ANALYZE (in PostgreSQL aggiungi BUFFERS) in un ambiente con dati realistici, non vuoto.
- Incolla la query, il piano completo e la definizione di tabelle e indici.
- Applica prima la correzione più efficace in staging e confronta il nuovo piano.
Esempio d'uso
Motore: PostgreSQL 16 · Query: ordini di un cliente degli ultimi 90 giorni ordinati per data · Tabella ordini: 12 milioni di righe · Eseguita 300 volte al minuto.
Esempio di risultato
1. Lettura del piano
- Seq Scan on ordini — legge ~11,9 M righe per tenere solo quelle di un cliente. Nessun indice inizia con
cliente_id. - Sort (external merge, Disk: 48MB) — ordina per
creato_ilsu disco perché non entra inwork_mem. - Limit — tutto questo lavoro per usare solo 20 righe.
2. Collo di bottiglia
La scansione sequenziale è il problema principale; il sort su disco ne è la conseguenza. Il piano è troncato (Filter: ...): conferma le righe reali del filtro con EXPLAIN (ANALYZE, BUFFERS).
3. Correzione consigliata
-- Prima la colonna di uguaglianza, poi quella di intervallo/ordinamento:
-- l'indice restituisce le righe già ordinate e il Limit si ferma a 20
CREATE INDEX CONCURRENTLY idx_ordini_cliente_creato
ON ordini (cliente_id, creato_il DESC);
ANALYZE ordini;
CONCURRENTLY non blocca le scritture, ma impiega di più e non può girare dentro una transazione (attenzione agli strumenti di migrazione che ne aprono una di default).
4. Costo
| Aspetto | Impatto |
|---|---|
| Disco | Proporzionale a 12 M voci su due colonne |
| Scritture | Un indice in più da aggiornare a ogni INSERT |
| Duplicati | Non si sovrappone all’indice su stato |
5. Verifica
Rilancia l’EXPLAIN: dovresti vedere Index Scan using idx_ordini_cliente_creato e il nodo Sort dovrebbe sparire…
Dati chiave
- Categoria
- Programmazione e sviluppo · SQL
- Tipo di output
- Codice
- Livello
- Avanzato
- Pensato per
- ChatGPT, Claude, Gemini e Microsoft Copilot
- Verificato in
- In attesa di verifica editoriale
- Variabili
- Motore di database, Query SQL, Piano di esecuzione, Tabelle, indici e volumi e Frequenza e obiettivo
- Lingua
- Italiano
- Prezzo
- Gratuito, senza registrazione
- Aggiornato
- 07/11/2026
Domande frequenti
Perché serve EXPLAIN ANALYZE e non basta EXPLAIN?
EXPLAIN mostra solo stime. EXPLAIN ANALYZE esegue la query e mostra righe e tempi reali: la differenza tra i due è l’indizio più utile. Poiché la esegue davvero, prova UPDATE o DELETE dentro una transazione annullata.
Aggiungere indici velocizza sempre il database?
No. Ogni indice occupa spazio e rallenta le scritture. Per questo il prompt chiede il costo di ciascuno e controlla i duplicati.
A cosa serve questo prompt?
Leggi nodo per nodo il piano di esecuzione di una query SQL lenta, trova il collo di bottiglia e ottieni indici o riscritture concrete con il loro costo sulle scritture.
Con quali strumenti di IA funziona?
È pensato per ChatGPT, Claude, Gemini e Microsoft Copilot. Non lo abbiamo ancora verificato in questi strumenti, quindi i risultati possono variare da uno all'altro.
Come personalizzo il prompt?
Clicca su «Personalizza» e compila le variabili (Motore di database, Query SQL, Piano di esecuzione, Tabelle, indici e volumi e Frequenza e obiettivo). Il testo si aggiorna all'istante e poi puoi copiarlo con un clic. I valori vengono salvati solo nel tuo browser.
Serve esperienza per usarlo?
È di livello avanzato: è pensato per persone con esperienza nell'argomento, in grado di valutare e regolare il risultato.
Questo prompt è gratuito?
Sì. Tutti i prompt di HomeCasa Prompts sono gratuiti, senza registrazione né abbonamento. Puoi usarli anche in progetti professionali.
Posso fidarmi dell'output dell'IA?
Consideralo una bozza di alta qualità: verifica sempre dati, cifre e affermazioni importanti prima di pubblicare o prendere decisioni.