262
Chapitre 8. Optimisation du code SQL
En SQL Server 2008, les événements de trace Performance : Plan Guide Successful Event
et Performance : Plan Guide Unsuccessful Event vous indiquent les plans d’exécutions créés
à l’aide d’un guide, ou si la création du plan a échoué. De même, dans SSMS, vous trouvez
la liste des guides de plan dans l’explorateur d’objets, sous le nœud « Programmability ».
La vue système sys.plan_guides liste les guides de plan enregistrés dans la base
courante.
8.3 OPTIMISATION DU CODE SQL
Un SGBDR est un serveur dont le travail est d’assurer un stockage des données
optimal et cohérent. Il est maître de ses données. SQL est un langage de requête (le
nom est bien choisi) dont l’expression est déclarative : via une requête SQL, le
programmeur décrit le résultat désiré. Par exemple, une requête comme celle-ci :
SELECT FirstName, LastName
FROM Person.Contact
WHERE Title = 'Mr.'
ORDER BY LastName, FirstName;
est purement « descriptive » : on y demande une liste des prénoms et noms de
contacts, lorsque leur titre est « Mr. », triés par nom et prénom. À aucun moment,
on indique au serveur comment produire cette liste. Tout à fait comme lorsque vous
allez dans une librairie commander un livre, vous demandez simplement à votre
libraire de passer commande d’un ouvrage, vous ne lui dites pas : « pourriez-vous
faire une recherche dans votre catalogue de livres distribués, pour noter le numéro
ISBN du titre que je souhaite obtenir, pour le copier-coller dans votre programme de
commande, et y inscrire mon nom. Ensuite, merci d’imprimer un bon de commande
pour le faire parvenir par voie postale au distributeur de ces éditions. »
Votre libraire est bien plus qualifié que vous pour effectuer cette tâche, et
d’ailleurs, si vous le forciez à utiliser votre méthode, la commande prendrait peutêtre plus de temps, ou même ne serait-elle jamais faite correctement. SQL Server
fonctionne de la même façon. Si la syntaxe du langage est déclarative, son exécution
sera finalement procédurale : le moteur d’optimisation, qui fait partie du moteur
relationnel, est un bijou d’algorithmique. La stratégie de plan d’exécution se base sur
les connaissances dont dispose le moteur d’optimisation sur la structure et le contenu des tables et des vues. Le travail du programmeur SQL est d’écrire la requête la
plus descriptive possible, pour donner l’information précise de ce que la requête doit
obtenir.
Durant la phase de compilation, le moteur relationnel a une grande capacité à
normaliser les syntaxes équivalentes pour produire l’arbre d’exécution. Par exemple,
ces requêtes produisent (presque) le même plan (sur SQL Server 2005) :
SELECT c.FirstName, c.LastName
FROM Person.Contact c
CROSS JOIN HumanResources.Employee e
Chapitre 8. Optimisation du code SQL
En SQL Server 2008, les événements de trace Performance : Plan Guide Successful Event
et Performance : Plan Guide Unsuccessful Event vous indiquent les plans d’exécutions créés
à l’aide d’un guide, ou si la création du plan a échoué. De même, dans SSMS, vous trouvez
la liste des guides de plan dans l’explorateur d’objets, sous le nœud « Programmability ».
La vue système sys.plan_guides liste les guides de plan enregistrés dans la base
courante.
8.3 OPTIMISATION DU CODE SQL
Un SGBDR est un serveur dont le travail est d’assurer un stockage des données
optimal et cohérent. Il est maître de ses données. SQL est un langage de requête (le
nom est bien choisi) dont l’expression est déclarative : via une requête SQL, le
programmeur décrit le résultat désiré. Par exemple, une requête comme celle-ci :
SELECT FirstName, LastName
FROM Person.Contact
WHERE Title = 'Mr.'
ORDER BY LastName, FirstName;
est purement « descriptive » : on y demande une liste des prénoms et noms de
contacts, lorsque leur titre est « Mr. », triés par nom et prénom. À aucun moment,
on indique au serveur comment produire cette liste. Tout à fait comme lorsque vous
allez dans une librairie commander un livre, vous demandez simplement à votre
libraire de passer commande d’un ouvrage, vous ne lui dites pas : « pourriez-vous
faire une recherche dans votre catalogue de livres distribués, pour noter le numéro
ISBN du titre que je souhaite obtenir, pour le copier-coller dans votre programme de
commande, et y inscrire mon nom. Ensuite, merci d’imprimer un bon de commande
pour le faire parvenir par voie postale au distributeur de ces éditions. »
Votre libraire est bien plus qualifié que vous pour effectuer cette tâche, et
d’ailleurs, si vous le forciez à utiliser votre méthode, la commande prendrait peutêtre plus de temps, ou même ne serait-elle jamais faite correctement. SQL Server
fonctionne de la même façon. Si la syntaxe du langage est déclarative, son exécution
sera finalement procédurale : le moteur d’optimisation, qui fait partie du moteur
relationnel, est un bijou d’algorithmique. La stratégie de plan d’exécution se base sur
les connaissances dont dispose le moteur d’optimisation sur la structure et le contenu des tables et des vues. Le travail du programmeur SQL est d’écrire la requête la
plus descriptive possible, pour donner l’information précise de ce que la requête doit
obtenir.
Durant la phase de compilation, le moteur relationnel a une grande capacité à
normaliser les syntaxes équivalentes pour produire l’arbre d’exécution. Par exemple,
ces requêtes produisent (presque) le même plan (sur SQL Server 2005) :
SELECT c.FirstName, c.LastName
FROM Person.Contact c
CROSS JOIN HumanResources.Employee e
