Comprendere l'istruzione EXPLAIN
Usare l'istruzione EXPLAIN per visualizzare il piano di esecuzione per la query. EXPLAIN può essere usato con qualsiasi istruzione SELECT, INSERT, UPDATE, DELETE, VALUES, EXECUTE, DECLARE o CREATE TABLE AS.
EXPLAIN visualizza il piano di esecuzione per la query, consentendo di comprendere in che modo PostgreSQL esegue un'istruzione, se vengono usati gli indici, il modo in cui le tabelle vengono unite in join e il costo notzionale di una query.
La sintassi per EXPLAIN è:
EXPLAIN [ (parameter [, ...] ) ] statement
I parametri facoltativi sono:
- ANALIZZARE
- PROLISSO
- COSTI
- BUFFER
- FORMATO
Per esempio:
EXPLAIN ANALYZE SELECT * FROM category ORDER BY cat_id;
Questa query semplice restituisce le informazioni seguenti:
ANALIZZARE
Questa opzione esegue l'istruzione e restituisce il piano di esecuzione della query. L'output dell'istruzione viene rimosso, ma l'istruzione viene comunque eseguita. È possibile combinare le istruzioni ROLLBACK e EXPLAIN ANALYZE per impedire l'applicazione delle modifiche a una query che apporta modifiche al database, ad esempio INSERT, UPDATE o DELETE. Per esempio:
BEGIN;
> EXPLAIN ANALYZE INSERT INTO Animal
> (ani_id, name, weight_kg, cat_id, enc_id)
> VALUES (28, 'Robin Robin', 0.5, 1, 2);
ROLLBACK;
PROLISSO
Visualizza informazioni aggiuntive, tra cui:
- elenco delle colonne di output per ciascun nodo nell'albero del piano
- i nomi di tabella e funzione qualificati dallo schema
- i nomi delle variabili nelle espressioni insieme all'alias della tabella
- nome di ogni trigger per cui vengono visualizzate le statistiche
COSTI
Include il costo di avvio stimato e il costo totale, oltre al numero stimato di righe e alla larghezza stimata di ogni riga.
BUFFER
I buffer possono essere usati solo con l'opzione ANALYZE. PostgreSQL usa una cache LRU (Least Recently Used) per archiviare i dati usati di frequente in memoria. I buffer visualizzano la quantità di dati provenienti da una cache e la quantità di dati recuperati dal disco. Visualizza il numero di riscontri, letture e scritture sui blocchi condivisi, locali e temporanei. I dati forniti da BUFFERS consentono di comprendere parti che richiedono un utilizzo intensivo di I/O di una query.
FORMATO
Definisce il formato di output. XML, JSON o YAML contengono le stesse informazioni di TEXT, ma in un formato più semplice da usare per i programmi. TEXT è l'impostazione predefinita.