Comprendre l’instruction EXPLAIN

Effectué

Utilisez l’instruction EXPLAIN pour afficher le plan d’exécution de la requête. EXPLAIN peut être utilisé avec n’importe quelle instruction SELECT, INSERT, UPDATE, DELETE, VALUES, EXECUTE, DECLARE ou CREATE TABLE AS.

EXPLAIN affiche le plan d’exécution de la requête, ce qui vous permet de comprendre comment PostgreSQL exécute une instruction, si les index seront utilisés, la façon dont les tables seront jointes ainsi que le coût notionnel d’une requête.

La syntaxe EXPLAIN est la suivante :

EXPLAIN [ (parameter [, ...] ) ] statement

Les paramètres facultatifs sont :

  • ANALYSE
  • DÉTAILLÉ
  • COSTS
  • BUFFERS
  • FORMAT

Par exemple :

EXPLAIN ANALYZE SELECT * FROM category ORDER BY cat_id;

Cette requête simple retourne les informations suivantes :

Capture d’écran montrant le plan de requête.

ANALYSE

Cette option exécute l’instruction et retourne le plan de requête. La sortie de l’instruction est ignorée, mais l’instruction est quand même exécutée. Vous pouvez combiner les instructions ROLLBACK et EXPLAIN ANALYZE pour empêcher l'application des modifications avec une requête qui modifie la base de données, telle que INSERT, UPDATE ou DELETE. Par exemple :

BEGIN;

> EXPLAIN ANALYZE INSERT INTO Animal 
> (ani_id, name, weight_kg, cat_id, enc_id) 
> VALUES (28, 'Robin Robin', 0.5, 1, 2);

ROLLBACK;

DÉTAILLÉ

Affiche des informations supplémentaires, notamment :

  • liste des colonnes de sortie pour chaque nœud dans l’arborescence du plan
  • les noms de table et de fonction qualifiés par le schéma
  • noms de variables dans les expressions avec l’alias de table
  • nom de chaque déclencheur pour lequel les statistiques sont affichées

COSTS

Inclut le coût de démarrage estimé et le coût total, ainsi que le nombre estimé de lignes et la largeur estimée de chaque ligne.

BUFFERS

Les mémoires tampon peuvent uniquement être utilisées avec l’option ANALYZE. PostgreSQL utilise un cache LRU (dernier récemment utilisé) pour stocker les données fréquemment utilisées en mémoire. Les mémoires tampons affichent la quantité de données provenant d’un cache et la quantité récupérée à partir du disque. Affiche le nombre de correspondances trouvées, de lectures et d’écritures pour les blocs partagés, locaux et temporaires. Les données fournies par BUFFERS peuvent aider à identifier les parties d’une requête qui sont les plus gourmandes en E/S.

FORMAT

Définit le format de sortie. XML, JSON ou YAML contiennent les mêmes informations que TEXT, mais dans un format plus facile à utiliser pour les programmes. TEXT est la valeur par défaut.