Plan de requête - Query plan

Un plan de requête (ou plan d'exécution de requête ) est une séquence d'étapes utilisée pour accéder aux données dans un système de gestion de base de données relationnelle SQL . Il s'agit d'un cas particulier du concept de modèle relationnel des plans d'accès.

Étant donné que SQL est déclaratif , il existe généralement de nombreuses autres façons d'exécuter une requête donnée, avec des performances très variables. Lorsqu'une requête est soumise à la base de données, l' optimiseur de requête évalue certains des différents plans corrects possibles pour l'exécution de la requête et renvoie ce qu'il considère comme la meilleure option. Les optimiseurs de requêtes étant imparfaits, les utilisateurs et administrateurs de bases de données doivent parfois examiner et ajuster manuellement les plans produits par l'optimiseur pour obtenir de meilleures performances.

Génération de plans de requête

Un système de gestion de base de données donné peut offrir un ou plusieurs mécanismes pour retourner le plan pour une requête donnée. Certains packages comportent des outils qui généreront une représentation graphique d'un plan de requête. D'autres outils permettent de définir un mode spécial sur la connexion pour que le SGBD renvoie une description textuelle du plan de requête. Un autre mécanisme de récupération du plan de requête consiste à interroger une table de base de données virtuelle après avoir exécuté la requête à examiner. Dans Oracle, par exemple, cela peut être réalisé à l'aide de l'instruction EXPLAIN PLAN.

Plans graphiques

L' outil Microsoft SQL Server Management Studio , fourni avec Microsoft SQL Server , par exemple, affiche ce plan graphique lors de l'exécution de cet exemple de jointure à deux tables sur un exemple de base de données inclus :

SELECT *
FROM HumanResources.Employee AS e
    INNER JOIN Person.Contact AS c
    ON e.ContactID = c.ContactID
ORDER BY c.LastName

L'interface utilisateur permet d'explorer divers attributs des opérateurs impliqués dans le plan de requête, y compris le type d'opérateur, le nombre de lignes que chaque opérateur consomme ou produit, et le coût attendu du travail de chaque opérateur.

Microsoft SQL Server Management Studio affichant un exemple de plan de requête.

Plans textuels

Le plan textuel donné pour la même requête dans la capture d'écran est affiché ici :

StmtText
----
  |--Sort(ORDER BY:([c].[LastName] ASC))
       |--Nested Loops(Inner Join, OUTER REFERENCES:([e].[ContactID], [Expr1004]) WITH UNORDERED PREFETCH)
            |--Clustered Index Scan(OBJECT:([AdventureWorks].[HumanResources].[Employee].[PK_Employee_EmployeeID] AS [e]))
            |--Clustered Index Seek(OBJECT:([AdventureWorks].[Person].[Contact].[PK_Contact_ContactID] AS [c]),
               SEEK:([c].[ContactID]=[AdventureWorks].[HumanResources].[Employee].[ContactID] as [e].[ContactID]) ORDERED FORWARD)

Il indique que le moteur de requête effectuera une analyse sur l'index de clé primaire sur la table Employee et une recherche correspondante à travers l'index de clé primaire (la colonne ContactID) sur la table Contact pour trouver les lignes correspondantes. Les lignes résultantes de chaque côté seront affichées dans un opérateur de jointure à boucles imbriquées, triées, puis renvoyées en tant que jeu de résultats à la connexion.

Afin de régler la requête, l'utilisateur doit comprendre les différents opérateurs que la base de données peut utiliser, et ceux qui pourraient être plus efficaces que d'autres tout en fournissant des résultats de requête sémantiquement corrects.

Optimisation de la base de données

L'examen du plan de requête peut présenter des opportunités pour de nouveaux index ou des modifications aux index existants. Cela peut également montrer que la base de données ne tire pas correctement parti des index existants (voir optimiseur de requête ).

Optimisation des requêtes

Un optimiseur de requête ne choisira pas toujours le plan de requête le plus efficace pour une requête donnée. Dans certaines bases de données, le plan de requête peut être examiné, les problèmes détectés, puis l' optimiseur de requête donne des conseils sur la façon de l'améliorer. Dans d'autres bases de données, des alternatives pour exprimer la même requête (d'autres requêtes qui renvoient les mêmes résultats) peuvent être essayées. Certains outils de requête peuvent générer des conseils intégrés dans la requête, à utiliser par l'optimiseur.

Certaines bases de données, comme Oracle, fournissent une table de plan pour le réglage des requêtes. Cette table de plan renverra le coût et le temps d'exécution d'une requête. Oracle propose deux approches d'optimisation :

  1. CBO ou optimisation basée sur les coûts
  2. RBO ou optimisation basée sur des règles

RBO est progressivement obsolète. Pour que CBO soit utilisé, toutes les tables référencées par la requête doivent être analysées. Pour analyser une table, un DBA peut lancer du code à partir du package DBMS_STATS.

Les autres outils d'optimisation des requêtes incluent :

  1. Trace SQL
  2. Trace Oracle et TKPROF
  3. Plan d'exécution Microsoft SMS (SQL)
  4. Enregistrement des performances Tableau (toutes les bases de données)

Les références