254
Chapitre 8. Optimisation du code SQL
ou recherche de cet index. C’est une de deux formes particulières du bookmark
lookup ;
Vous verrez souvent des opérateurs de Segment, Sequence et SequenceProject
dans les requêtes impliquant des fonctions de fenêtrage (une syntaxe de la norme
SQL implémentée en SQL Server depuis la version 2005). Elles servent à calculer le
résultat de ces fonctions à l’intérieur du jeu de résultats. SQL Server 2008 améliore
les performances des fonctions de fenêtrages.
Sort – tri des lignes d’entrée. La propriété ORDER BY indique la ou les colonnes sur
lesquelles s’opère le tri.
Spool et Table Spool – Spool sauve le résultat intermédiaire dans une table de
travail dans tempdb, Table Spool fait de même à partir des lignes parcourues et sélectionnées dans l’opérateur enfant.
Stream Aggregate – calcul d’agrégation sur un ensemble ou sous-ensemble provenant d’une source triée. Si la source n’est pas déjà triée (elle l’est par exemple si
elle provient d’un scan d’index, puisque la clé de l’index est triée), un opérateur Sort
devra précéder celui-ci (ou un Hash Aggregate sera utilisé, selon la taille de la table).
Vous trouvez dans les propriétés de l’opérateur l’expression de calcul 1 .
Table Scan – scan de table sans index clustered, donc de table heap.
Table-valued Function – une fonction utilisateur retournant une table est appelée. La table retournée est stockée dans tempdb (c’est une variable de type table), elle
sera traitée dans tempdb.
UDX – une opération XML, comme un FOR XML ou une requête XQuery.
8.1.2 Algorithmes de jointure
SQL Server implémente trois algorithmes physiques pour effectuer des jointures.
Nous allons les présenter.
La boucle imbriquée (nested loop) est l’algorithme de base, qui est le plus simple
et le plus utilisé dans les plans d’exécution. Il consiste à extraire des lignes d’une première table (la table externe), et à rechercher leur correspondance dans une seconde
table (la table interne), comme si on cherchait une liste de références dans un premier livre, pour aller chercher chaque référence dans un second. L’algorithme peut
se schématiser ainsi :
pour chaque ligne de la table externe
pour chaque ligne de la table externe
joindre les lignes
retour des lignes
1. http://blogs.msdn.com/craigfr/archive/2006/09/13/752728.aspx
Chapitre 8. Optimisation du code SQL
ou recherche de cet index. C’est une de deux formes particulières du bookmark
lookup ;
Vous verrez souvent des opérateurs de Segment, Sequence et SequenceProject
dans les requêtes impliquant des fonctions de fenêtrage (une syntaxe de la norme
SQL implémentée en SQL Server depuis la version 2005). Elles servent à calculer le
résultat de ces fonctions à l’intérieur du jeu de résultats. SQL Server 2008 améliore
les performances des fonctions de fenêtrages.
Sort – tri des lignes d’entrée. La propriété ORDER BY indique la ou les colonnes sur
lesquelles s’opère le tri.
Spool et Table Spool – Spool sauve le résultat intermédiaire dans une table de
travail dans tempdb, Table Spool fait de même à partir des lignes parcourues et sélectionnées dans l’opérateur enfant.
Stream Aggregate – calcul d’agrégation sur un ensemble ou sous-ensemble provenant d’une source triée. Si la source n’est pas déjà triée (elle l’est par exemple si
elle provient d’un scan d’index, puisque la clé de l’index est triée), un opérateur Sort
devra précéder celui-ci (ou un Hash Aggregate sera utilisé, selon la taille de la table).
Vous trouvez dans les propriétés de l’opérateur l’expression de calcul 1 .
Table Scan – scan de table sans index clustered, donc de table heap.
Table-valued Function – une fonction utilisateur retournant une table est appelée. La table retournée est stockée dans tempdb (c’est une variable de type table), elle
sera traitée dans tempdb.
UDX – une opération XML, comme un FOR XML ou une requête XQuery.
8.1.2 Algorithmes de jointure
SQL Server implémente trois algorithmes physiques pour effectuer des jointures.
Nous allons les présenter.
La boucle imbriquée (nested loop) est l’algorithme de base, qui est le plus simple
et le plus utilisé dans les plans d’exécution. Il consiste à extraire des lignes d’une première table (la table externe), et à rechercher leur correspondance dans une seconde
table (la table interne), comme si on cherchait une liste de références dans un premier livre, pour aller chercher chaque référence dans un second. L’algorithme peut
se schématiser ainsi :
pour chaque ligne de la table externe
pour chaque ligne de la table externe
joindre les lignes
retour des lignes
1. http://blogs.msdn.com/craigfr/archive/2006/09/13/752728.aspx
