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
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
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
In PostgreSQLEXPLAIN
, 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'usoEXPLAIN ANALYZE
, fai attenzione a INSERT
UPDATE
, eDELETE
.
Come leggere il piano di interrogazione EXPLAIN
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
, oIndex 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.
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.