Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Le plan de requête EXPLAIN
PostgreSQL fournit les options EXPLAIN ANALYZE
et pour renvoyer EXPLAIN
des plans de requête avec des détails sur la façon dont la requête sera exécutée.
La déclaration EXPLAIN
L'EXPLAIN
instruction renvoie le plan de requête généré par le planificateur PostgreSQL pour une instruction donnée. Le plan de requête indique les éléments suivants :
-
Comment les tables impliquées dans un relevé seront numérisées (par exemple, par analyse d'index ou analyse séquentielle)
-
Comment plusieurs tables seront jointes (par exemple, jointure par hachage, jointure par fusion ou jointure par boucle imbriquée)
Il est essentiel de comprendre le plan pour améliorer les performances de la requête. Après avoir compris le plan, vous pouvez vous concentrer sur les points où la requête prend trop de temps et prendre des mesures pour réduire le temps.
Utiliser EXPLAIN ANALYZE
Dans PostgreSQLEXPLAIN
, ne générera un plan que pour l'instruction donnée. Si vous ajoutez le ANALYZE
mot clé, il EXPLAIN
renverra le plan, exécutera la requête et affichera le temps d'exécution réel et le nombre de lignes pour chaque étape. Cela est indispensable pour analyser les performances des requêtes.
Important
Lors de l'utilisationEXPLAIN ANALYZE
, soyez prudent avec INSERT
UPDATE
, etDELETE
.
Comment lire le plan de requête EXPLAIN
Un plan de requête PostgreSQL est une structure arborescente composée de plusieurs nœuds. Le plan de EXPLAIN
requête indique les étapes utilisées par le moteur de base de données pour exécuter une requête. Le plan de requête fournit les informations suivantes :
-
Type d'opérations effectuées, telles que les analyses séquentielles, les analyses d'index ou les jointures par boucles imbriquées.
-
Une étiquette, telle que
Seq Scan
, ouIndex Scan
Nested Loop
, pour décrire l'opération en cours d'exécution. -
Nom de la table ou de l'index traité par la requête.
-
Colonnes de coûts et de lignes contenant des informations sur le coût estimé dans une unité de calcul arbitraire et le nombre de lignes traitées.
-
État du filtre appliqué à l'opération, tel que la
where
condition. -
Une représentation visuelle des étapes, chaque opération étant représentée par un nœud et des flèches reliant les opérations. L'ordre des opérations est affiché de gauche à droite, les opérations antérieures alimentant les opérations ultérieures.
La capture d'écran suivante montre le plan de requête pour un scan séquentiel.
L'estimation des coûts (cost=0.00..32.60 rows=2260 width=8)
signifie que PostgreSQL prévoit que la requête nécessitera 32,60 unités de calcul pour renvoyer des résultats.
La 0.00
valeur est le coût auquel ce nœud peut commencer à fonctionner (dans ce cas, l'heure de démarrage de la requête). La rows
valeur est le nombre estimé de lignes que le scan séquentiel renverra. La width
valeur est la taille estimée en octets des lignes renvoyées.
Comme l'exemple montre EXPLAIN
l'ANALYZE
option, la requête a été exécutée et les informations temporelles ont été capturées. Le résultat (actual
time=0.120..0.121 rows=1 loops=1)
signifie ce qui suit :
-
Le scan séquentiel a été exécuté une fois (
loops
valeur). -
Le scan a renvoyé une ligne.
-
Le temps réel était de 0,12 milliseconde.