300
Chapitre 9. Optimisation des procédures stockées
C’est-à-dire deux recompilations, pour compilation déférée. Si nous exécutons
ensuite EXEC dbo.testtemptable 7, voici le résultat en figure 9.3 :
Figure 9.3 — Recompilations sur tables temporaires
Nous avons dû faire ici une requête SELECT sur la table temporaire un tout petit
plus compliquée que nécessaire, parce que le comportement du cache sur des procédures stockées est bien meilleur qu’auparavant. La recompilation se déclenche au
bout de la sixième insertion dans la table, ce qui est le comportement normal de
SQL Server.
À la deuxième exécution de la procédure, il n’y aura pas recompilation, l’instruction étant déjà cachée avec un plan valable. SQL Server est donc capable de gérer
assez bien les recompilations dues aux tables temporaires. Cela ne veut pas dire que
vous devez les utiliser sans modération. Évitez donc le recours exagéré aux tables
temporaires. Elles sont souvent inutiles et peuvent être remplacées par des sousrequêtes, des expressions de table (CTE, common table expressions), ou, au pire, des
variables de table pour les petits volumes. Si vous êtes forcé de composer avec des
tables temporaires, et que vous détectez par le profiler des recompilations fréquentes
dues à des changements de cardinalité dans les tables, il vous reste deux options de
Précédent

- 312/334

Suivant