Tous les termes du glossaire

EXPLAIN et EXPLAIN ANALYZE

À quoi sert EXPLAIN ANALYZE dans PostgreSQL ?

EXPLAIN montre comment PostgreSQL prévoit d’exécuter une requête ; EXPLAIN ANALYZE l’exécute en plus et indique le nombre réel de lignes et la durée de chaque étape.

EXPLAIN affiche la stratégie d’exécution choisie par le planificateur pour une instruction : quelles tables sont lues et comment, quelles méthodes de jointure sont employées, ainsi que le coût et le nombre de lignes estimés à chaque étape. Avec l’option ANALYZE, PostgreSQL exécute réellement l’instruction et ajoute la durée et le nombre de lignes réels à côté des estimations.

Comparer les lignes estimées aux lignes réelles est le moyen le plus rapide de repérer des statistiques obsolètes ou un mauvais choix de méthode d’accès. L’option BUFFERS indique en plus combien de pages ont été trouvées en mémoire partagée et combien ont dû être lues. Comme EXPLAIN ANALYZE exécute réellement l’instruction, encadrez les instructions qui modifient des données par BEGIN et ROLLBACK lorsque vous voulez seulement les examiner.

Exemple

L’exemple recherche une adresse e-mail dans une table qui n’a pas d’index sur cette colonne. La sortie affiche un Seq Scan avec le nombre de lignes estimé et réel, les durées et les statistiques de tampons.

CREATE TABLE users (id int PRIMARY KEY, email text);
INSERT INTO users
SELECT g, 'user' || g || '@example.com' FROM generate_series(1, 50000) AS g;
ANALYZE users;

EXPLAIN (ANALYZE, BUFFERS)
SELECT * FROM users WHERE email = 'user42@example.com';

Du SQL simple pour PostgreSQL 16 ou 17 standard, sans aucune extension. Exécutez-le dans une base de données vide que vous pouvez jeter ensuite.

Références

Documentation officielle de PostgreSQL (en anglais).

Termes associés