

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Il piano di interrogazione EXPLAIN
<a name="explain-query-plan"></a>

PostgreSQL fornisce le opzioni `EXPLAIN ANALYZE` e `EXPLAIN` le opzioni per restituire piani di query con dettagli su come verrà eseguita la query.

## L'istruzione EXPLAIN
<a name="explain"></a>

L'`EXPLAIN`istruzione restituisce il piano di query generato dal pianificatore PostgreSQL per una determinata istruzione. Il piano di interrogazione mostra quanto segue:
+ Come verranno scansionate le tabelle coinvolte in un'istruzione (ad esempio, mediante scansione dell'indice o scansione sequenziale)
+ Come verranno unite più tabelle (ad esempio, hash join, merge join o nested loop join)

La comprensione del piano è fondamentale per migliorare le prestazioni della query. Dopo aver compreso il piano, puoi concentrarti sui punti in cui la query impiega troppo tempo e agire per ridurre i tempi.

## Utilizzo di EXPLAIN ANAL
<a name="explain-analyze"></a>

In PostgreSQL`EXPLAIN`, genererà solo un piano per l'istruzione specificata. Se aggiungi la `ANALYZE` parola chiave, `EXPLAIN` restituirà il piano, eseguirà la query e mostrerà il runtime effettivo e il conteggio delle righe per ogni passaggio. Questo è indispensabile per analizzare le prestazioni delle query.

**Importante**  
Durante l'uso`EXPLAIN ANALYZE`, fai attenzione a `INSERT``UPDATE`, e`DELETE`.

## Come leggere il piano di interrogazione EXPLAIN
<a name="read"></a>

*Un piano di query PostgreSQL è una struttura ad albero composta da diversi nodi.* Il piano di `EXPLAIN` query mostra i passaggi utilizzati dal motore di database per eseguire una query. Il piano di interrogazione fornisce le seguenti informazioni:
+ Il tipo di operazioni eseguite, ad esempio scansioni sequenziali, scansioni di indici o loop join annidati.
+ Un'etichetta, ad esempio`Seq Scan`, o `Index Scan``Nested Loop`, per descrivere l'operazione eseguita.
+ Il nome della tabella o dell'indice che viene elaborato dalla query.
+ Colonne di costo e riga con informazioni sul costo stimato in un'unità di calcolo arbitraria e sul numero di righe elaborate.
+ La condizione di filtro di qualsiasi filtro applicato all'operazione, ad esempio la `where` condizione.
+ Una rappresentazione visiva dei passaggi, con ogni operazione mostrata come nodo e frecce che collegano le operazioni. L'ordine delle operazioni viene mostrato da sinistra a destra, con le operazioni precedenti che si aggiungono alle operazioni successive.

La schermata seguente mostra il piano di interrogazione per una scansione sequenziale.



![\[Piano di interrogazione mostrato nella scheda Data Output in pGAdmin.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/postgresql-query-tuning/images/query-plan.png)


La stima dei costi `(cost=0.00..32.60 rows=2260 width=8)` indica che PostgreSQL prevede che la query richieda 32,60 unità di calcolo per restituire i risultati.

Il `0.00` valore è il costo al quale questo nodo può iniziare a funzionare (in questo caso, il tempo di avvio della query). Il `rows` valore è il numero stimato di righe restituite dalla scansione sequenziale. Il `width` valore è la dimensione stimata in byte delle righe restituite.

Poiché l'esempio mostra `EXPLAIN` con l'`ANALYZE`opzione, la query è stata eseguita e le informazioni sulla tempistica sono state acquisite. Il risultato `(actual time=0.120..0.121 rows=1 loops=1)` indica quanto segue:
+ La scansione sequenziale è stata eseguita una sola volta (il `loops` valore).
+ La scansione ha restituito una riga.
+ Il tempo effettivo era di 0,12 millisecondi.