Vysvětlení příkazu EXPLAIN
Pomocí příkazu EXPLAIN zobrazte plán provádění dotazu. FUNKCI EXPLAIN lze použít s libovolným příkazem SELECT, INSERT, UPDATE, DELETE, VALUES, EXECUTE, DECLARE nebo CREATE TABLE AS.
FUNKCE EXPLAIN zobrazí plán provádění dotazu, který vám umožní pochopit, jak PostgreSQL: provede příkaz, jestli se používají indexy, jak se tabulky spojují, a pomyslné náklady na dotaz.
Syntaxe funkce EXPLAIN je:
EXPLAIN [ (parameter [, ...] ) ] statement
Volitelné parametry jsou:
- ANALÝZA
- PODROBNÁ
- NÁKLADY
- VYROVNÁVACÍ PAMĚTI
- FORMÁT
Příklad:
EXPLAIN ANALYZE SELECT * FROM category ORDER BY cat_id;
Tento jednoduchý dotaz vrátí následující informace:
ANALÝZA
Tato možnost spustí příkaz a vrátí plán dotazu. Výstup příkazu se zahodí, ale příkaz se přesto spustí. Příkazy ROLLBACK a EXPLAIN ANALYZE můžete zkombinovat, abyste zabránili použití změn pomocí dotazu, který provede změny v databázi, například INSERT, UPDATE nebo DELETE. Příklad:
BEGIN;
> EXPLAIN ANALYZE INSERT INTO Animal
> (ani_id, name, weight_kg, cat_id, enc_id)
> VALUES (28, 'Robin Robin', 0.5, 1, 2);
ROLLBACK;
PODROBNÁ
Zobrazí další informace, mezi které patří:
- seznam výstupních sloupců pro každý uzel ve stromu plánu
- názvy tabulek a funkcí kvalifikovaných podle schématu
- názvy proměnných ve výrazech společně s aliasem tabulky
- název každého triggeru, pro který se zobrazují statistiky
NÁKLADY
Zahrnuje odhadované počáteční náklady a celkové náklady a odhadovaný počet řádků a odhadovanou šířku každého řádku.
VYROVNÁVACÍ PAMĚTI
Vyrovnávací paměti lze použít pouze s možností ANALYZOVAT. PostgreSQL používá mezipaměť LRU (Least Recently Used) k ukládání často používaných dat do paměti. Vyrovnávací paměti zobrazují, kolik dat pochází z mezipaměti a kolik se načte z disku. Zobrazí počet přístupů ke sdíleným, místním a dočasným blokům, čtení a zápisů. Data poskytovaná vyrovnávacími paměťmi můžou pomoct pochopit části dotazu náročné na vstupně-výstupní operace.
FORMÁT
Definuje výstupní formát. XML, JSON nebo YAML obsahují stejné informace jako TEXT, ale ve formátu, který je pro programy jednodušší. Hodnota TEXT je výchozí.