AccueilđŸ‡«đŸ‡·Chercher

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

Plan d'exécution MySQL PhpMyAdmin d'un 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

Voir aussi

Cet article est issu de wikipedia. Text licence: CC BY-SA 4.0, Des conditions supplĂ©mentaires peuvent s’appliquer aux fichiers multimĂ©dias.