Le plan de requête EXPLAIN - AWS Directives prescriptives

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'EXPLAINinstruction 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 INSERTUPDATE, 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 queSeq Scan, ou Index ScanNested 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.

Plan de requête affiché dans l'onglet Sortie de données de pgAdmin.

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'ANALYZEoption, 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 (loopsvaleur).

  • Le scan a renvoyé une ligne.

  • Le temps réel était de 0,12 milliseconde.