253
8.1 Lecture d’un plan d’exécution
SELECT TOP 0 * FROM Person.Address;
SELECT * FROM Person.Address WHERE 1 = 0;
créent un plan très simple, composés d’un seul Constant Scan.
Eager Spool et Lazy Spool – les opérateurs de spool créent une table de travail
dans tempdb. Leur différence vient de leur « enthousiasme » à le faire. Le spool
enthousiaste (eager) insère toutes les lignes en une seule fois dans la table de travail,
alors que le spool paresseux (lazy) le fait une ligne après l’autre : lorsque l’opérateur
dépendant du Lazy Spool lui demande une ligne, celui-ci en fait la demande à son
opérateur enfant, et stocke la ligne dans le spool.
Filter – filtre un jeu de lignes selon le critère présent dans sa propriété Argument.
Hash Aggregate – calcul d’agrégation utilisé plutôt sur des volumes importants,
et uniquement quand la requête utilise un GROUP BY. Une table de hachage est créée
pour permettre un calcul sur tous les sous-ensembles en même temps. Cette méthode
utilise plus de mémoire et verrouille plus que le Stream Aggregate.
Hash Match – test de présence de ligne sur une table de hachage bâtie à partir de
l’entrée de l’opérateur enfant (la liste des colonnes faisant partie du hachage est dans
le prédicat HASH:() de la propriété Argument). Les valeurs de hachage sont calculées
pour chaque ligne testée et comparées à la table de hachage, pour tester leur présence. C’est un opérateur physique qui dépend de trois types d’opérateurs logiques :
• join – l’opérateur enfant du haut est celui sur lequel la table de hachage est
basée, l’opérateur du bas est celui à partir duquel chaque ligne est testée ;
• aggregate ou distinct – la table de hachage est créée à partir de l’entrée, les
doublons sont supprimés, ou les agrégations calculées, puis la comparaison est
faite avec un scan de la même entrée pour conserver les match ;
• union – la table de hachage est calculée à partir de l’opérateur enfant du haut.
Les doublons sont éliminés. Les lignes de l’entrée du bas sont testées, et les
non-match sont retournés.
Key Lookup – recherche de lignes dans une table clustered, à partir d’une clé
d’index clustered présente dans un index nonclustered, après parcours ou recherche de
cet index. C’est une de deux formes particulières du bookmark lookup.
Merge Interval – normalise plusieurs intervalles pour en produire un seul, qui
sera utilisé dans une recherche d’index.
Nonclustered Index Spool – un index nonclustered est créé sur une table de travail dans tempdb, pour améliorer les performances de recherche dans cette table.
Les opérateurs Remote (Delete, Insert, Query, Scan, Update) indiquent des opérations sur un serveur distant ou un serveur lié (le plus souvent à travers un serveur
lié, linked server, les serveurs distants, remote server, étant obsolètes).
RID Lookup – recherche de lignes dans une table heap, à partir d’un identifiant
de ligne (Row ID) présent au niveau feuille d’un index nonclustered, après parcours
Précédent

- 265/334

Suivant