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

modifier
 
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

modifier

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

modifier

Voir aussi

modifier

📚 Artikel Terkait di Wikipedia

Parallélisation automatique

scientific and numeric applications with predictable flow control (e.g., nested loop structures with statically determined iteration counts) and statically

Optimisation de requête

hints : tri fusion (merge join) hachage (hash join) boucle imbriquée (nested loop join) produit (product join). De même, si l'ordre des conditions dans

Variantes de la PCR

 795–800 (PMID 15247927, PMCID 1249482, DOI 10.1038/sj.embor.7400200) « Loop-mediated isothermal amplification of DNA », Nucleic Acids Res., vol. 28,

RFLAGS

condition code cc (par exemple les instructions SETNE, SETNO, etc.). LOOPcc : Loop on condition code cc (par exemple les instructions LOOPE, LOOPNZ, etc.) CMOVcc :