Plan d'exécution
En informatique, et plus précisément dans le domaine des bases de données, un plan d'exécution est un schéma pas à pas des opérations d'accÚs aux données d'un systÚme de gestion de base de données SQL.
Principe
SELECT
avec une jointure sur un wiki, sous forme d'un tableau en bas obtenu en cliquant sur "Expliquer SQL".L'optimisation de requĂȘte consiste Ă Ă©tudier la meilleure maniĂšre d'exĂ©cuter une requĂȘte SQL. Comme les optimiseurs automatiques ne sont pas parfaits, les administrateurs de bases de donnĂ©es sont parfois amenĂ©s Ă examiner et prĂ©ciser le plan d'exĂ©cution le plus rapide, par exemple en dĂ©finissant l'algorithme de jointure Ă utiliser en tenant compte du volume des donnĂ©es manipulĂ©es. Les mots clĂ©s Ă inclure dans les requĂȘtes SQL pour influencer le plan d'exĂ©cution sont appelĂ©s les hints (ou indicateurs).
Pour visualiser le rendu, certains SGBD permettent de représenter les plans d'exécution sous forme de texte ou de graphique[1]. En ligne de commande, il est possible d'utiliser l'instruction SQL EXPLAIN pour afficher le plan d'exécution, notamment sur un SELECT.
Exemple
Voici une requĂȘte avec son plan d'exĂ©cution affichĂ© par Microsoft SQL Server :
SELECT *
FROM HumanResources.Employee AS e
INNER JOIN Person.Contact AS c
ON e.ContactID = c.ContactID
ORDER BY c.LastName
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)
On y voit que le moteur commence (en bas du plan d'exécution) par scanner la table Employee sur la clé primaire ContactID, puis recherche la correspondance avec la table Contact.
Le résultat est ensuite joint par l'algorithme Nested Loops
, et classé par LastName.
Notes et références
- (en) Cet article est partiellement ou en totalitĂ© issu de lâarticle de WikipĂ©dia en anglais intitulĂ© « Query plan » (voir la liste des auteurs).