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

  1. Esegui EXPLAIN ANALYZE (in PostgreSQL aggiungi BUFFERS) in un ambiente con dati realistici, non vuoto.
  2. Incolla la query, il piano completo e la definizione di tabelle e indici.
  3. 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

  1. Seq Scan on ordini — legge ~11,9 M righe per tenere solo quelle di un cliente. Nessun indice inizia con cliente_id.
  2. Sort (external merge, Disk: 48MB) — ordina per creato_il su disco perché non entra in work_mem.
  3. 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

AspettoImpatto
DiscoProporzionale a 12 M voci su due colonne
ScrittureUn indice in più da aggiornare a ogni INSERT
DuplicatiNon 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.

Prompt correlati