Partager via


Référence d’opérateur showplan logique et physique

S’applique à : SQL Server Azure SQL Database Azure SQL Managed Instance

Les opérateurs décrivent comment SQL Server exécute une requête ou une instruction DML (langage de manipulation de données). L'optimiseur de requête utilise des opérateurs pour construire un plan de requête qui crée le résultat spécifié dans la requête ou pour exécuter l'opération spécifiée dans l'instruction DML. Le plan de requête est une arborescence composée d'opérateurs physiques. Vous pouvez afficher le plan de requête à l'aide des instructions SET SHOWPLAN, des options de plan d’exécution graphique dans SQL Server Management Studio ou des événements Extended Events showplan.

Les opérateurs sont classés en opérateurs logiques et physiques.

Opérateurs logiques

Les opérateurs logiques décrivent l'opération algébrique relationnelle utilisée pour traiter une instruction. En d'autres termes, les opérateurs logiques décrivent de manière conceptuelle les opérations à exécuter.

Opérateurs physiques

Les opérateurs physiques mettent en œuvre l'opération décrite par des opérateurs logiques. Chaque opérateur physique désigne un objet ou une routine chargée d'effectuer une opération. Par exemple, certains opérateurs physiques permettent d'accéder à des colonnes ou des lignes à partir d'une table, d'un index ou d'une vue. D'autres opérateurs physiques exécutent des opérations telles que des calculs, des agrégations, des contrôles de l'intégrité des données vérifie ou des jointures. Des coûts sont associés aux opérateurs physiques.

Les opérateurs physiques s'initialisent, collectent des données et se ferment. En particulier, l'opérateur physique peut répondre aux trois méthodes d'appel suivantes :

  • Open() : la méthode Open() fait qu’un opérateur physique s’initialise lui-même et configure les structures de données nécessaires. Même si l’opérateur physique peut recevoir de nombreux appels Open(), il ne reçoit généralement qu’un seul.

  • GetRow() : la méthode GetRow() fait que l’opérateur physique récupère la première ligne de données ou la suivante. L’opérateur physique peut recevoir zéro ou de nombreux appels GetRow().

  • Close() : la méthode Close() fait que l’opérateur physique effectue certaines opérations de nettoyage et se ferme elle-même. Un opérateur physique ne reçoit qu’un appel Close(), mais un appel Close() n’est pas toujours garanti.

La méthode GetRow() renvoie une ligne de données, et le nombre d’appels qu’elle reçoit s’affiche sous ActualRows dans le résultat showplan qui est produit par le showplan graphique et XML. Pour plus d’informations sur ces options SET, consultez SET STATISTICS PROFILE (Transact-SQL) et SET STATISTICS XML (Transact-SQL).

Les compteurs ActualRebinds et ActualRewinds qui s’affichent dans le résultat de showplan indiquent le nombre de fois que la méthode Open() est appelée. Sauf si un opérateur se trouve sur le côté intérieur d'une jointure de boucles imbriquées, ActualRebinds est égal à un, et ActualRewinds est égal à zéro. Si un opérateur se trouve sur le côté intérieur d'une jointure de boucles, le nombre total de reliaisons et de rembobinages doit être égal au nombre de ligne traitées sur le côté extérieur de la jointure. Une reliaison signifie qu'un ou plusieurs des paramètres corrélés de la jointure ont changé, et que le côté intérieur doit être réévalué. Un rembobinage signifie qu'aucun des paramètres corrélés n'a changé, et que l'ancien jeu de résultats interne peut être réutilisé.

ActualRebinds et ActualRewinds sont présents dans le résultat du showplan XML produit à l’aide de SET STATISTICS XML ON et du plan d’affichage graphique. Ils ne sont remplis que pour les opérateurs Nonclustered Index Spool, Remote Query, Row Count Spool, Sort, Table Spool et Table-valued Function. ActualRebinds et ActualRewinds peuvent aussi être remplis pour les opérateurs Assert et Filter lorsque l'attribut StartupExpression est défini à TRUE.

Lorsque ActualRebinds et ActualRewinds sont présents dans un showplan XML, ils sont comparables à EstimateRebinds et EstimateRewinds. S’ils sont absents, le nombre estimé de lignes (EstimateRows) est comparable au nombre réel de lignes (ActualRows). Le résultat graphique de showplan affiche des zéros pour les reliaisons réelles et les rembobinages réels lorsqu’ils sont absents.

Un compteur associé, ActualEndOfScans, est disponible dans le showplan XML et graphique. Chaque fois qu'un opérateur physique atteint la fin de son flux de données, le compteur augmente d’un. Un opérateur physique peut atteindre la fin de son flux de données zéro, une ou de nombreuses fois. Comme pour les reliaisons et les rembobinages, le nombre de fin d’acquisition peut être supérieur à un, uniquement si l’opérateur se trouve à l’intérieur d’une boucle. Le nombre de fin d’acquisition doit être inférieur ou égal à la somme du nombre de reliaisons et de rembobinages.

Cartographier les opérateurs physiques et logiques

L'optimiseur de requête crée un plan de requête sous forme d'arborescence d'opérateurs logiques. Après avoir créé le plan, l'optimiseur de requête choisit l'opérateur physique le plus efficace pour chaque opérateur logique. L'optimiseur de requête utilise une approche basée sur les coûts pour déterminer l'opérateur physique qui met en œuvre un opérateur logique.

Généralement, une opération logique peut être mise en œuvre par plusieurs opérateurs physiques. Toutefois, en de rares occasions, un opérateur physique peut également mettre en œuvre plusieurs opérations logiques.

Exécution en mode batch

L’exécution en mode batch est une méthode de traitement de requête utilisée pour traiter plusieurs lignes ensemble (d’où le terme batch) plutôt qu’une ligne à la fois. Le traitement en mode Batch utilise des algorithmes qui sont optimisés pour des processeurs multicœurs et un débit mémoire amélioré sur le matériel moderne. Le mode Batch peut être utilisé par un ensemble d’opérateurs pour les objets rowstore et columnstore. Pour plus d’informations, consultez le Guide d’architecture de traitement des requêtes.

Descriptions de l’opérateur

Cette section contient la description des opérateurs logiques et physiques. Vous pouvez afficher les propriétés des plans de requête et des opérateurs à l’aide du volet Properties dans la vue Plan de requête de SQL Server Management Studio (SSMS) et d’Azure Data Studio.

Conseil

Chaque fois qu’une icône de plan d’exécution graphique donnée possède un cercle jaune avec deux flèches de droite à gauche, cela signifie que l’opérateur est exécuté en parallèle. Pour plus d’informations sur le parallélisme, consultez le Guide de l’architecture des threads et des tâches.

Icône Opérateur Showplan Description
Jointure adaptative L’opérateur de Jointure adaptative permet de choisir de différer une méthode de jointure hachée ou de jointure de boucles imbriquées tant que la première entrée n’a pas été analysée.

Adaptive Join est un opérateur physique. Pour plus d'informations, consultez Compréhension des jointures adaptatives.
Agrégat L'opérateur Aggregate calcule une expression contenant MIN, MAX, SUM, COUNT ou AVG.

Aggregate est un opérateur logique et physique.
Arithmetic Expression L'opérateur Arithmetic Expression calcule une nouvelle valeur à partir de valeurs existantes dans une ligne. Arithmetic Expression n’est pas utilisée dans les versions plus récentes de SQL Server.
Assert L'opérateur Assert vérifie une condition. Par exemple, il valide l'intégrité référentielle ou garantit qu'une sous-requête scalaire retourne une ligne. Pour chaque ligne d'entrée, l'opérateur Assert résout l'expression du volet Properties du plan d'exécution. Si cette expression est évaluée à NULL, la ligne est passée par l’opérateur Assert et l’exécution de la requête continue. Si cette expression est évaluée à une valeur non nulle, l’erreur appropriée est levée.

Assert est un opérateur physique.
Attribuer L'opérateur Assign assigne la valeur d'une expression ou une constante à une variable.

Assign est un élément de langage.
Aucune Async Concat L’opérateur Async Concat est utilisé seulement dans les requêtes distantes (requêtes distribuées). Elle a n enfants et un nœud parent. En règle générale, certains des enfants sont des ordinateurs distants qui participent à une requête distribuée. Async Concat émet des appels Open() à tous les enfants simultanément et applique ensuite une bitmap à chacun d’eux. Pour chaque bit à 1, Async Concat envoie à la demande les lignes obtenues au nœud parent.
Bitmap SQL Server utilise l’opérateur Bitmap pour implémenter le filtrage Bitmap dans les plans de requête parallèles. Le filtrage Bitmap accélère l'exécution des requêtes en éliminant les lignes contenant des valeurs de clés qui ne peuvent pas produire d'enregistrements de jointure avant de transmettre les lignes à un autre opérateur tel que l'opérateur Parallelism. Un filtre Bitmap utilise une représentation compacte d'un ensemble de valeurs d'une table dans une partie de l'arborescence de l'opérateur pour filtrer les lignes d'une seconde table dans une autre partie de l'arborescence. Avec la suppression des lignes inutiles tôt dans la requête, les opérateurs suivants ont moins de lignes à traiter et les performances globales de la requête sont améliorées. L'optimiseur détermine quand un filtre Bitmap est suffisamment sélectif pour être utile et dans quels opérateurs le filtre doit être appliqué.

Bitmap est un opérateur physique.
Bitmap Create L'opérateur Bitmap Create apparaît dans la sortie de plan d'exécution de requêtes où les bitmaps sont construits.

Bitmap Create est un opérateur logique.
Aucune Branch Repartition Dans un plan de requête parallèle, il existe parfois des régions conceptuelles composées d'itérateurs. Tous les itérateurs de ces régions peuvent être exécutés par des threads parallèles. Les régions elles-mêmes doivent être exécutées séquentiellement. Certains itérateurs Parallelism d'une région distincte sont appelés Branch Repartition. L'itérateur Parallelism situé à la limite de deux régions de ce type est appelé Segment Repartition.

Branch Repartition et Segment Repartition sont des opérateurs logiques.
Broadcast Broadcast comporte un nœud enfant et n nœuds parents. Broadcast envoie ses lignes d'entrée à plusieurs consommateurs à la demande. Chaque consommateur obtient toutes les lignes. Par exemple, si tous les consommateurs se trouvent des côtés construction d'une jointure de hachage, n copies des tables de hachage sont générées.
Build Hash Indique la création d'une table de hachage de lot pour un index columnstore optimisé en mémoire.

S’applique à : SQL Server 2012 (11.x) uniquement.
Clustered Index Delete L’opérateur Clustered Index Delete supprime les lignes de l’index cluster spécifié dans la propriété Objet, répertoriée dans le volet Propriétés des plans d’affichage graphique et XML. Si un SeekPredicate ou un Predicate est présent, seules les lignes qui répondent au prédicat sont supprimées.

Remarque : les modifications apportées aux index cluster peuvent affecter les index non cluster.

Clustered Index Delete est un opérateur physique.
Clustered Index Insert L’opérateur Clustered Index Insert insère les lignes de l'entrée dans l’index cluster spécifié dans la propriété Objet, répertoriée dans le volet Propriétés des plans d’affichage graphique et XML. Le plan d’affichage XML inclut les propriétés SetPredicate et ColumnReference, qui peuvent être utilisées pour déterminer la valeur à laquelle chaque colonne est définie. Si Clustered Index Insert ne possède pas d'enfant pour les valeurs insert, la ligne insérée est extraite de l'opérateur Insert lui-même.

Remarque : les modifications apportées aux index cluster peuvent affecter les index non cluster.

Clustered Index Insert est un opérateur physique.
Clustered Index Merge L'opérateur Clustered Index Merge applique un flux de données de fusion à un index cluster. L’opérateur supprime, met à jour ou insère les lignes de l’index cluster spécifié dans la propriété Objet, répertoriée dans le volet Propriétés des plans d’affichage graphique et XML. L’opération réelle effectuée dépend de la valeur d’exécution de la propriété ActionColumn.

Remarque : les modifications apportées aux index cluster peuvent affecter les index non cluster.

Clustered Index Merge est un opérateur physique.
Clustered Index Scan L’opérateur Clustered Index Scan analyse l’index cluster spécifié dans la propriété Object, répertorié dans le volet Properties des plans d’affichage graphique et XML. Lorsqu'un Predicate facultatif est présent, seules les lignes répondant au prédicat sont retournées. Si la propriété Ordered dans le volet Properties ou le plan d’affichage XML a la valeur True, le processeur de requêtes a déterminé que les lignes doivent être retournées dans l’ordre dans lequel l’index cluster les a triés. Si la propriété Ordered est False, le moteur de base de données effectue la recherche dans l'index de façon optimale, sans nécessairement trier la sortie.

Clustered Index Scan est un opérateur logique et physique.
Clustered Index Seek L'opérateur Clustered Index Seek utilise la fonction recherche des index pour extraire des lignes d'un index cluster. La propriété Object, répertoriée dans le volet Properties des plans d’affichage graphique et XML, contient le nom de l’index cluster utilisé. Le SeekPredicate contient le prédicat de la recherche. Le moteur de base de données utilise l'index pour ne traiter que les lignes répondant au prédicat SeekPredicate. Il peut également inclure une propriété Predicate où le moteur de base de données évalue toutes les lignes qui satisfont le SeekPredicate, mais c’est facultatif et n’utilise pas d’index pour terminer ce processus.

Si la propriété Ordered dans le volet Properties ou le plan d’affichage XML a la valeur True, le processeur de requêtes a déterminé que les lignes doivent être retournées dans l’ordre dans lequel l’index cluster les a triés. Si la propriété Ordered est False, le moteur de base de données recherche dans l'index de façon optimale, sans nécessairement trier la sortie. Exiger que la sortie conserve son classement peut s'avérer moins efficace que la production d'une sortie non triée.

Clustered Index Seek est un opérateur logique et physique.
Clustered Index Update L’opérateur Clustered Index Update met à jour les lignes d’entrée dans le cluster spécifié dans la propriété Object, répertorié dans le volet Properties des plans d’affichage graphique et XML. Si la propriété Predicate est présente, seules les lignes qui répondent à ce prédicat sont mises à jour. Si la propriété SetPredicate est présente, chaque colonne mise à jour prend cette valeur. Si la propriété DefineValue est présente, elle établit la liste des valeurs définies par cet opérateur. Ces valeurs peuvent être référencées dans la clause SET ou ailleurs dans cet opérateur, et ailleurs dans cette requête.

Remarque : les modifications apportées aux index cluster peuvent affecter les index non cluster.

Clustered Index Update est un opérateur logique et physique.
Collapse L'opérateur Collapse permet d'optimiser le traitement de mise à jour des données. Lorsqu’une mise à jour est effectuée, elle peut être divisée (par l’opérateur Split ) en opérations de suppression puis d’insertion de données. Le volet Propriétés contient un prédicat groupe par qui spécifie une liste de colonnes clés. Si le processeur de requêtes rencontre des lignes adjacentes d'instructions de suppression puis d'insertion des mêmes valeurs de clé, il regroupe alors ces opérations en une seule et même opération de mise à jour pour gagner en efficacité.

Collapse est un opérateur logique et physique.
Columnstore Index Delete L’opérateur Columnstore Index Delete représente la suppression des lignes de l’index columnstore spécifié dans la propriété Object, répertoriée dans le volet Properties des plans d’affichage graphique et XML. La suppression se produit via Clustered Index Delete pour un index columnstore cluster et via l’opérateur Index Delete pour un index columnstore non cluster. Le type d’index (Clustered, NonClustered ou ViewNonClustered) est spécifié dans la propriété IndexKind dans le showplan XML. SeekPredicate n’est pas pris en charge pour une suppression Columnstore Index Delete. Les lignes à supprimer sont lues à partir d’un opérateur enfant.

Columnstore Index Delete est un opérateur physique.
Columnstore Index Insert L’opérateur Columnstore Index Insert représente l’insertion des lignes de l’index columnstore spécifié dans la propriété Object, répertoriée dans le volet Properties des plans d’affichage graphique et XML. L’insertion se produit via Clustered Index Insert pour un index columnstore groupé et via l’opérateur Index Insert pour un index columnstore non groupé. Le type d’index (Clustered, NonClustered ou ViewNonClustered) est spécifié dans la propriété IndexKind dans le showplan XML. Le plan d’affichage XML inclut les propriétés SetPredicate et ColumnReference, qui peuvent être utilisées pour déterminer la valeur à laquelle chaque colonne est définie.

Remarque : les modifications apportées aux index cluster peuvent affecter les index non cluster.

Columnstore Index Insert est un opérateur physique.
Columnstore Index Merge Columnstore Index Merge représente l’application d’un flux de données de fusion à l’aide de l’opérateur Clustered Index Merge. L’opérateur supprime, met à jour ou insère les lignes de l’index columnstore groupé spécifié dans la propriété Object, répertoriée dans le volet Properties des plans d’affichage graphique et XML. L’opération réelle effectuée dépend de la valeur d’exécution de la propriété ActionColumn.

Remarque : les modifications apportées aux index cluster peuvent affecter les index non cluster.

Columnstore Index Merge est un opérateur physique.
Analyse d'index columnstore L’opérateur Columnstore Index Scan représente l’analyse des lignes de l’index columnstore spécifié dans la propriété Object, répertoriée dans le volet Properties des plans d’affichage graphique et XML. L’analyse se produit via Clustered Index Scan pour un index columnstore groupé et via l’opérateur Index Scan pour un index columnstore non groupé. Le type d’index (Clustered, NonClustered ou ViewNonClustered) est spécifié dans la propriété IndexKind dans le showplan XML. Lorsqu'un Predicate facultatif est présent, seules les lignes répondant au prédicat sont retournées. La propriété SeekPredicate est disponible uniquement pour un index columnstore partitionné et uniquement pour des conditions d’égalité ou d’inégalité. Si la colonne partitionnée est dans le prédicat de requête, l’élimination de partition peut réduire le nombre de groupes de lignes à analyser.

Columnstore Index Scan est un opérateur physique.
Columnstore Index Update L’opérateur Columnstore Index Update représente la mise à jour des lignes de l’index columnstore spécifié dans la propriété Object, répertoriée dans le volet Properties des plans d’affichage graphique et XML. La mise à jour se produit via Clustered Index Update pour un index columnstore groupé et via l’opérateur Index Update pour un index columnstore non groupé. Le type d’index (Clustered, NonClustered ou ViewNonClustered) est spécifié dans la propriété IndexKind dans le showplan XML. Le SeekPredicate n’est pas pris en charge pour un Columnstore Index Update. Les lignes à mettre à jour sont lues à partir d’un opérateur enfant. Si la propriété SetPredicate est présente, chaque colonne mise à jour prend cette valeur. Si la propriété DefineValue est présente, elle établit la liste des valeurs définies par cet opérateur. Ces valeurs peuvent être référencées dans la clause SET ou ailleurs dans cet opérateur, et ailleurs dans cette requête.

Remarque : les modifications apportées aux index cluster peuvent affecter les index non cluster.

Columnstore Index Update est un opérateur physique.
Compute Scalar L'opérateur Compute Scalar évalue une expression pour produire une valeur scalaire calculée. Celle-ci peut ensuite être retournée à l'utilisateur, référencée n'importe où dans la requête, ou les deux. Les deux sont utilisés par exemple dans un prédicat de filtre ou de jointure.

Il se peut que les opérateurs Compute Scalar qui apparaissent dans les plans d'exécution générés par SET STATISTICS XML ne contiennent pas l'élément RunTimeInformation. Dans les plans d'exécution graphiques, Actual Rows, Actual Rebinds et Actual Rewinds peuvent être absents de la fenêtre Properties lorsque l'option Inclure le plan d'exécution réel est sélectionnée dans SQL Server Management Studio. Si cela se produit, cela signifie que, même si ces opérateurs ont été utilisés dans le plan de requête compilé, leur travail a été exécuté par d'autres opérateurs dans le plan de requête à l'exécution. Le nombre d'exécutions figurant dans le résultat du plan d'exécution produit par SET STATISTICS PROFILE équivaut à la somme des reliaisons et des rembobinages des plans d'exécution produits par SET STATISTICS XML.

Compute Scalar est un opérateur logique et physique.
Concatenation L'opérateur Concatenation analyse plusieurs entrées et renvoie chaque ligne analysée. Concatenation sert généralement à implémenter la construction UNION ALL de Transact-SQL. L'opérateur physique Concatenation a deux entrées ou plus, et une sortie. L'opérateur Concatenation copie des lignes depuis le premier flux d'entrée vers le flux de sortie, puis répète l'opération pour chacun des autres flux d'entrée.

Concatenation est un opérateur logique et physique.
Conditional (If et While) L'opérateur Conditional effectue un traitement conditionnel basé sur un loop IF ou WHILE. If et While sont des éléments de langage.
Constant Scan L'opérateur Constant Scan introduit une ou plusieurs lignes de constante dans une requête. Un opérateur Compute Scalar est souvent utilisé après un opérateur Constant Scan pour ajouter des colonnes à une ligne produite par l'opérateur Constant Scan . Constant scan peut générer une ou plusieurs lignes avec zéro ou plusieurs colonnes.
Convertir L'opérateur Convert convertit une expression d'un type de données scalaire en un autre.

Convert est un élément de langage.
Cross Join L’opérateur Cross Join relie chaque ligne de la première entrée (du haut) à chaque ligne de la deuxième entrée (du bas).

Cross Join est un opérateur logique.
Curseur Les opérateurs physiques et logiques de curseur sont utilisés pour décrire le mode d'exécution d'une requête ou d'une mise à jour impliquant des opérations de curseur. Les opérateurs physiques décrivent l'algorithme d'implémentation physique utilisé pour traiter le curseur, par exemple, à l'aide d'un curseur contrôlé par clés. Chaque étape de l'exécution d'un curseur implique un opérateur physique. Les opérateurs logiques décrivent une propriété du curseur, par exemple, le curseur est en lecture seule.

Les opérateurs logiques incluent Asynchronous, Optimistic, Primary, Read Only, Scroll Locks et Secondary et Synchronous.

Les opérateurs physiques incluent Dynamic, Fetch Query, Keyset, Population Query, Refresh Query et Snapshot.
Declare L’opérateur Declare alloue une variable locale dans le plan de requête.

Declare est un élément de langage.
Supprimer L'opérateur Delete supprime des lignes (d’un objet) qui répond au prédicat facultatif du volet Properties.
Deleted Scan Dans des déclencheurs, l'opérateur Deleted Scan analyse la table supprimée.
Aucune Distinct L'opérateur Distinct supprime les doublons d'un ensemble de lignes ou d'une collection de valeurs.

Distinct est un opérateur logique.
Aucune Distinct Sort L’opérateur logique Distinct Sort analyse les entrées en éliminant les doublons et en triant les colonnes spécifiées dans le prédicat distinct order by du volet Properties.

Distinct Sort est un opérateur logique.
Distribute Streams L'opérateur Distribute Streams est utilisé uniquement dans les plans de requête parallèles. L'opérateur Distribute Streams ne mobilise qu'un seul flux d'entrée d'enregistrements et produit plusieurs flux de sortie. Le contenu et le format des enregistrements ne sont pas modifiés. Chaque enregistrement provenant du flux d'entrée apparaît dans l'un des flux de sortie. Cet opérateur conserve automatiquement l'ordre relatif des enregistrements d'entrée dans les flux de sortie. Habituellement, le hachage est utilisé pour définir à quel flux de sortie appartient un enregistrement d'entrée particulier.

Si la sortie est partitionnée, le volet Properties contient alors un prédicat partition columns et les colonnes de partitionnement.

Distribute Streams est un opérateur logique.
Dynamique L'opérateur Dynamic utilise un curseur capable de détecter toutes les modifications effectuées par d'autres utilisateurs.
Eager Spool L'opérateur Eager Spool utilise l'ensemble de l'entrée en stockant chaque ligne dans un objet temporaire masqué stocké dans la base de données tempdb . Si l’opérateur est réutilisé (par un opérateur Nested Loops , par exemple) mais qu’aucune nouvelle liaison n’est nécessaire, les données mises en attente sont utilisées au lieu d’une nouvelle analyse de l’entrée. Si une nouvelle liaison est nécessaire, les données mises en attente sont supprimées et l'objet en attente est recréé par une nouvelle analyse de l'entrée (liée une nouvelle fois). L'opérateur Eager Spool crée le fichier spouleur avec « avidité » : lorsque l'opérateur parent du spool demande la première ligne, l'opérateur spool consomme toutes les lignes de son opérateur d'entrée et les stocke dans le spool.

Eager Spool est un opérateur logique.
Fetch Query L'opérateur Fetch Query extrait des lignes lorsqu'une extraction est émise à l'aide d'un curseur.
Filter L’opérateur Filter analyse l’entrée en ne retournant que les lignes répondant à l’expression du filtre (prédicat) qui apparaît dans le volet Properties.
Aucune Flow Distinct L'opérateur Flow Distinct analyse les entrées en éliminant les doublons. Alors que l’opérateur Distinct mobilise l’intégralité des entrées avant de produire une sortie, l’opérateur Flow Distinct retourne chaque ligne à mesure qu’il l’obtient de l’entrée (sauf si la ligne est un doublon, auquel cas elle est supprimée).

Flow Distinct est un opérateur logique.
Vérification des références de clé étrangère L’opérateur Vérification des références de clé étrangère effectue des vérifications de l’intégrité référentielle sur place, en comparant la ligne modifiée aux lignes des tables de référence, pour vérifier que la modification ne rompt pas l’intégrité référentielle. L’opérateur Vérification des références de clé étrangère est utilisé quand il existe plus de 253 références de clés étrangères sur la même clé primaire ou unique.

Vérification des références de clé étrangère est un opérateur logique et physique.
Full Outer Join L’opérateur logique Full Outer Join retourne chaque ligne répondant au prédicat de jointure de la première entrée (du haut) joint à chaque ligne de la seconde entrée (du bas). Il renvoie également les lignes de :

- La première entrée qui ne possède pas de correspondance dans la seconde entrée.

- La seconde entrée sans correspondance dans la première entrée.

L'entrée qui ne contient pas les valeurs correspondantes est retournée sous forme de valeur NULL.

Full Outer Join est un opérateur logique.
Gather Streams L'opérateur Gather Streams n'est utilisé que dans les plans de requête parallèle. Cet opérateur mobilise plusieurs flux d'entrée et ne produit qu'un flux de sortie d'enregistrements en associant les flux d'entrée. Le contenu et le format des enregistrements ne sont pas modifiés. Si l'opérateur conserve l'ordre, tous les flux d'entrée doivent alors être classés. Si la sortie est triée, le volet Properties contient un prédicat order by et les noms des colonnes classées.

Gather Streams est un opérateur logique.
Hash Match L'opérateur Hash Match crée une table de hachage en calculant une valeur de hachage pour chaque ligne à partir de son entrée de génération. Un prédicat hash accompagné d’une liste de colonnes utilisées pour créer une valeur de hachage, apparaît dans le volet Properties. Ensuite, il calcule, pour chaque ligne de sondage (le cas échéant), une valeur de hachage en utilisant la même fonction de hachage, et consulte la table de hachage pour trouver les correspondances. Si un prédicat résiduel (identifié par RESIDUAL:() dans le volet Properties) y figure, il doit également trouver les lignes qui doivent lui correspondre. Son comportement dépend de l'opération logique exécutée :

- Pour toutes les jointures, utilisez la première entrée (du haut) pour créer la table de hachage, et la seconde entrée (du bas) pour tester cette table. Les correspondances (ou non correspondances) de sortie sont dictées par le type de jointure. Si plusieurs jointures utilisent la même colonne de jointure, ces opérations sont regroupées dans une équipe de hachage.

- Pour les opérateurs distincts ou d’agrégation, utilisez l’entrée pour créer la table de hachage (en supprimant les doublons et en calculant les expressions d’agrégation). Une fois la table de hachage construite, parcourez-la et sortez toutes les entrées.

- Pour l’opérateur UNION, utilisez la première entrée pour créer la table de hachage (en supprimant les doublons). Utilisez la deuxième entrée (qui ne doit pas comporter de doublons) pour analyser la table de hachage, retourner toutes les lignes sans correspondance, puis analyser la table de hachage et retourner toutes les entrées.

Hash Match est un opérateur physique. Pour plus d'informations, consultez Compréhension des jointures hachées.
Index Delete L’opérateur Index Delete supprime les lignes de l’index non cluster spécifié dans le volet Properties.

Index Delete est un opérateur physique.
Index Insert L'opérateur Index Insert insère des lignes de son entrée dans l'index non-cluster spécifié dans le voletProperties. Le volet Properties contient également un prédicat set, qui indique la valeur sur laquelle chaque colonne est définie.

Index Insert est un opérateur physique.
Index Scan L'opérateur Index Scan récupère toutes les lignes de l'index non-cluster spécifié dans le volet Properties. Si un prédicat where facultatif figure dans le volet Properties, seules les lignes répondant à ce prédicat sont retournées.

Index Scan est un opérateur logique et physique.
Index Seek L'opérateur Index Seek utilise la capacité de recherche dans les index pour extraire des lignes d'un index non-cluster. Le volet Properties contient le nom de l'index non-cluster utilisé. Il contient également le prédicat seek. Le moteur de base de données utilise l'index pour ne traiter que les lignes répondant au prédicat seek. Il peut éventuellement inclure un prédicat where dans lequel le moteur de base de données est évalué par rapport à toutes les lignes répondant au prédicat seek (il ne fait pas appel aux index pour exécuter ce processus). Si le volet Properties contient la clause ORDERED, cela signifie que le processeur de requêtes a décidé que les lignes devaient être retournées dans l'ordre dans lequel l'index non-cluster les a triées. Si la clause ORDERED n'apparaît pas, le moteur de base de données recherche dans l'index de façon optimale (ce qui ne garantit pas que la sortie est triée). Autoriser la sortie à conserver son classement peut s'avérer moins efficace que la production d'une sortie non triée.

Index Seek est un opérateur logique et physique.
Index spool L’opérateur Index Spool contient un prédicat seek dans le volet Properties. L’opérateur Index Spool analyse ses lignes d’entrée en plaçant une copie de chaque ligne dans un fichier d’attente caché (stocké dans la base de données tempdb et qui n’existe que le temps de la requête) et construit un index non-cluster sur les lignes. Ceci vous permet d'utiliser les capacités de recherche des index afin de ne sortir que les lignes répondant au prédicat seek. Si l’opérateur est réutilisé (par un opérateur Nested Loops , par exemple) mais qu’aucune nouvelle liaison n’est nécessaire, les données mises en attente sont utilisées au lieu d’une nouvelle analyse de l’entrée.

Index Spool est un opérateur physique.
Index Update L'opérateur physique Index Update met à jour des lignes de son entrée dans l'index non-cluster spécifié dans le volet Properties. Si un prédicat set est présent, chaque colonne mise à jour prend cette valeur.

Index Update est un opérateur physique.
Inner Join L’opérateur Inner Join retourne chaque ligne répondant au prédicat de jointure de la première entrée (du haut) et de la seconde entrée (du bas).

Inner Join est un opérateur logique.
Insérer L'opérateur Insert insère chaque ligne de son entrée dans l'objet spécifié dans le volet Properties. L'opérateur physique est l'opérateur Table Insert, Index Insertou Clustered Index Insert .

Insert est un opérateur logique.
Inserted Scan Dans les déclencheurs, l'opérateur Inserted Scan analyse la table insérée.

Inserted Scan est un opérateur logique et physique.
Intrinsic L’opérateur Intrinsic appelle une fonction Transact-SQL interne.

Intrinsic est un élément de langage.
Iterator L'icône catchall Iterator s'affiche lorsque la logique qui produit des plans de requête graphiques ne parvient pas à trouver une icône adaptée pour l'itérateur. Cette icône n'indique pas nécessairement une condition d'erreur.
Key Lookup L'opérateur Key Lookup est une recherche de signet sur une table avec un index cluster. Le volet Properties contient le nom de l'index cluster et la clé de clustering utilisée pour rechercher la ligne dans l'index cluster. Key Lookup est toujours accompagné par un opérateur Nested Loops . Si la clause WITH PREFETCH apparaît dans le volet Properties, cela signifie que le processeur de requêtes a décidé que la prérécupération asynchrone (lecture anticipée) constitue la solution optimale pour la recherche de signets dans l’index cluster.

L'utilisation d'un opérateur Key Lookup dans un plan de requête indique que la requête peut bénéficier du réglage des performances. Par exemple, l'ajout d'un index explicatif peut améliorer les performances des requêtes.
Keyset L'opérateur Keyset utilise un curseur qui peut détecter les mises à jour, mais pas les insertions effectuées par d'autres.
Language Element L'icône catchall Language Element s'affiche lorsque la logique qui produit des plans de requête graphiques ne parvient pas à trouver une icône adaptée pour l'itérateur. Cette icône n'indique pas nécessairement une condition d'erreur.
Lazy Spool L'opérateur logique Lazy Spool stocke chaque ligne de son entrée dans un objet temporaire masqué, lui-même stocké dans la base de données tempdb . Si l’opérateur est réutilisé (par un opérateur Nested Loops , par exemple) mais qu’aucune nouvelle liaison n’est nécessaire, les données mises en attente sont utilisées au lieu d’une nouvelle analyse de l’entrée. Si une nouvelle liaison est nécessaire, les données mises en attente sont supprimées et l'objet en attente est recréé par une nouvelle analyse de l'entrée (liée une nouvelle fois). L'opérateur Lazy Spool crée son fichier d'attente de manière « économique » : chaque fois que l'opérateur parent du fichier d'attente demande une ligne, l'opérateur en attente obtient une ligne de son opérateur d'entrée et la stocke dans le fichier d'attente, au lieu de consommer toutes les lignes simultanément.

Lazy Spool est un opérateur logique.
Aucune Left Anti Semi Join L’opérateur Left Anti Semi Join retourne chaque ligne de la première entrée (du haut) lorsqu’il n’y a aucune ligne correspondante dans la seconde entrée (du bas). Si aucun prédicat de jointure n'est présent dans le volet Properties, chaque ligne est une ligne correspondante.

Left Anti Semi Join est un opérateur logique.
Aucune Left Outer Join L’opérateur logique Left Outer Join renvoie chaque ligne répondant au prédicat de jointure de la première entrée (du haut) et de la seconde entrée (du bas). Elle renvoie également toute ligne de la première entrée qui n’a pas de lignes correspondantes dans la seconde entrée. Les lignes sans correspondance de la seconde entrée sont renvoyées comme valeurs nulles. Si aucun prédicat de jointure n'est présent dans le volet Properties, chaque ligne est une ligne correspondante.

Left Outer Join est un opérateur logique.
Aucune Left Semi Join L’opérateur Left Semi Join retourne chaque ligne de la première entrée (du haut) lorsqu’il y a une ligne correspondante dans la seconde entrée (du bas). Si aucun prédicat de jointure n'est présent dans le volet Properties, chaque ligne est une ligne correspondante.

Left Semi Join est un opérateur logique.
Log Row Scan L'opérateur Log Row Scan analyse le journal des transactions.

Log Row Scan est un opérateur logique et physique.
Merge Interval L’opérateur Merge Interval fusionne plusieurs intervalles (susceptibles de se chevaucher) pour produire des intervalles minimaux qui ne se chevauchent pas, intervalles qui seront ensuite utilisés pour rechercher des entrées d’index. Cet opérateur apparaît généralement avant un ou plusieurs opérateurs Compute Scalar sur des opérateurs Constant Scan, qui créent les intervalles (représentés sous forme des colonnes d’une ligne) que l’opérateur fusionne.

Merge Interval est un opérateur logique et physique.
Merge Join L'opérateur Merge Join exécute les opérations logiques suivantes : inner join, left outer join, left semi join, left anti semi join, right outer join, right semi join, right anti semi join et union.

Dans le volet Properties, l’opérateur Merge Join contient un prédicat merge si l’opération exécute une jointure un-à-plusieurs, ou un prédicat many-to-many merge si l’opération exécute une jointure plusieurs-à-plusieurs. Le volet Properties inclut également une liste de colonnes séparées par des virgules utilisées pour exécuter l’opération. L'opérateur Merge Join nécessite deux entrées triées dans leurs colonnes respectives, peut-être par l'insertion d'opérations de tri explicites dans le plan de requête. L'opérateur Merge join est particulièrement efficace si le tri explicite n'est pas nécessaire, par exemple s'il existe un index B-tree approprié dans la base de données ou si l'ordre de tri peut être exploité pour plusieurs opérations, telles que jointure de fusion et regroupement par cumuls.

Merge Join est un opérateur physique. Pour plus d'informations, consultez Compréhension des jointures de fusion.
Nested Loops L'opérateur Nested Loops réalise les opérations logiques Inner Join, Left Outer Join, Left Semi Join et Left Anti Semi Join.

Les jointures de boucles imbriquées effectuent une recherche sur la table interne pour chaque ligne de la table externe, généralement en utilisant un index. Le processeur de requêtes décide, sur la base des coûts anticipés, de trier ou non l’entrée externe pour améliorer la localisation des recherches dans l’index de l’entrée interne. Les lignes répondant au prédicat (facultatif) du volet Properties sont renvoyées (le cas échéant, sur la base de l’opération logique exécutée). Lorsque l’attribut OPTIMIZED est défini sur True, cela signifie que des boucles imbriquées optimisées (ou un tri par lot) sont utilisées.

Nested Loops est un opérateur physique. Pour plus d'informations, consultez Compréhension des jointures de boucles imbriquées.
Aucune Online Index Insert L'opérateur Online Index Insert indique qu'une opération d’index (création, modification ou suppression) est effectuée en ligne. Autrement dit, les données de la table sous-jacente restent disponibles aux utilisateurs pendant l'opération d'index.

Online Index Insert est un opérateur physique.
Aucun Parallélisme L'opérateur Parallelism (ou itérateur d’échange) effectue les opérations logiques de distribution de flux, de collecte de flux, et de répartition de flux. Le volet Properties peut contenir un prédicat partition columns avec la liste des colonnes de partitionnement séparées par des virgules. Le volet Properties peut également contenir un prédicat order by qui liste les colonnes pour conserver l’ordre de tri durant le partitionnement.

Remarque : si une requête a été compilée en tant que requête parallèle, mais qu’elle est exécutée en tant que requête série, la sortie showplan générée par SET STATISTICS XML ou à l’aide de l’option Inclure le plan d’exécution réel dans SQL Server Management Studio ne contient pas l’élément RunTimeInformation pour l’opérateur Parallelism. Dans le résultat SET STATISTICS PROFILE, les compteurs de lignes réelles et le nombre réel d'exécutions affichent des zéros pour l'opérateur Parallelism. Si l’une ou l’autre de ces situations se produit, cela signifie que l’opérateur Parallelism n’a été utilisé que lors de la compilation de la requête, mais pas dans le plan de requête en cours d’exécution. Parfois, les plans de requête parallèles sont exécutés séquentiellement si le serveur doit faire face à des charges concurrentes élevées.

Parallelism est un opérateur physique. Pour plus d’informations sur l’opérateur Parallelism, consultez L’opérateur Parallelism.
Parameter Table Scan L'opérateur Parameter Table Scan analyse une table qui agit comme paramètre dans la requête en cours. Généralement, cet opérateur est utilisé dans une procédure stockée pour les requêtes INSERT.

Parameter Table Scan est un opérateur logique et physique.
Aucune Partial Aggregate Partial Aggregate est utilisé dans des plans parallèles. Il applique une fonction d'agrégation à autant de lignes d'entrée que possible, afin que l'écriture sur le disque (appelé « débordement ») ne soit pas nécessaire. Hash Match constitue l’unique opérateur physique (itérateur) qui implémente une agréation partielle.

Partial Aggregate est un opérateur logique.
Population Query L'opérateur Population Query permet de renseigner la table de travail d'un curseur lorsque le curseur est ouvert.
Refresh Query L'opérateur Refresh Query extrait les données courantes des lignes du tampon d'extraction.
Remote Delete L'opérateur Remote Delete supprime les lignes d'entrée d'un objet distant.

Remote Delete est un opérateur logique et physique.
Remote Index Scan L’opérateur Remote Index Scan analyse l’index distant spécifié dans le volet Properties.

Remote Index Scan est un opérateur logique et physique.
Remote Index Seek L'opérateur Remote Index Seek utilise les capacités de recherche d'un objet d'index distant pour extraire des lignes. Le volet Properties contient le nom de l’index distant utilisé et le prédicat seek.

Remote Index Seek est un opérateur logique et physique.
Remote Insert L'opérateur Remote Insert insère des lignes d'entrée dans un objet distant.

Remote Insert est un opérateur logique et physique.
Remote Query L'opérateur Remote Query soumet une requête à une source distante. Le texte de la requête envoyée au serveur distant apparaît dans le volet Properties.

Remote Query est un opérateur logique et physique.
Remote Scan L'opérateur Remote Scan analyse un objet distant. Le nom de l’objet distant apparaît dans le volet Properties.

Remote Scan est un opérateur logique et physique.
Remote Update L'opérateur Remote Update met à jour les lignes d'entrée dans un objet distant.

Remote Update est un opérateur logique et physique.
Repartition Streams L'opérateur Repartition Streams (ou itérateur d’échange) consomme plusieurs flux et produit plusieurs flux d'enregistrements. Le contenu et le format des enregistrements ne sont pas modifiés. Si l'optimiseur de requête utilise un filtre bitmap, le nombre de lignes dans le flux de sortie est réduit. Chaque enregistrement d'un flux d'entrée est placé dans un flux de sortie. Si l'opérateur conserve l'ordre de tri, tous les flux d'entrée seront classés et fusionnés en plusieurs flux de sortie triés. Si la sortie est partitionnée, le volet Properties contient un prédicat partition columns et les colonnes de partitionnement. Si la sortie est triée, le volet Properties contient un prédicat order by et les colonnes classées. Cet opérateur n'est utilisé que dans les plans de requête en parallèle.

Repartition Streams est un opérateur logique.
Résultat L'opérateur Result contient les données retournées à la fin d'un plan de requête. Il représente en général l'élément racine d'un plan d'exécution de requêtes.

Result est un élément de langage.
RID Lookup RID Lookup est une recherche de signet sur un segment utilisant un identificateur de ligne fourni (RID, Row Identifier). Le volet Properties contient l'étiquette de signet utilisée pour rechercher la ligne dans la table, ainsi que le nom de la table dans laquelle la ligne est recherchée. RID Lookup est toujours accompagné par un opérateur NESTED LOOP JOIN.

RID Lookup est un opérateur physique. Pour plus d’informations sur les recherches de signets, consultez Lecture validée et recherche de signets.
Aucune Right Anti Semi Join L’opérateur Right Anti Semi Join extrait chaque ligne de la seconde entrée (en bas) lorsqu’il n’existe pas de ligne correspondante dans la première entrée (en haut). Une ligne correspondante se définit comme une ligne répondant au prédicat du volet Properties (s’il n’y a pas de prédicat, chaque ligne est une ligne correspondante).

Right Anti Semi Join est un opérateur logique.
Aucune Right Outer Join L’opérateur Right Outer Join retourne chaque ligne répondant à la condition de jointure de la seconde entrée (du bas) avec chaque ligne correspondante dans la première entrée (du haut). Il retourne également toutes les lignes de la seconde entrée qui n'ont pas de lignes correspondantes dans la première entrée, reliées par la valeur NULL. Si aucun prédicat de jointure n'est présent dans le volet Properties, chaque ligne est une ligne correspondante.

Right Outer Join est un opérateur logique.
Aucune Right Semi Join L’opérateur Right Semi Join renvoie chaque ligne de la seconde entrée (du bas) lorsqu’il y a une ligne correspondante dans la première entrée (du haut). Si aucun prédicat de jointure n'est présent dans le volet Properties, chaque ligne est une ligne correspondante.

Right Semi Join est un opérateur logique.
Row Count Spool L'opérateur Row Count Spool analyse l'entrée en comptant le nombre de lignes présentes et en retournant ce même nombre de lignes exemptes de données. Cet opérateur est utilisé lorsqu'il est plus important de vérifier l'existence des lignes que les données qu'elles contiennent. Par exemple, si un opérateur Nested Loops exécute une opération Left Semi Joint et que le prédicat de jointure s'applique à l'entrée interne, un spool du nombre de lignes peut être placé en haut de l'entrée interne de l'opérateur Nested Loops. L’opérateur Nested Loops peut alors déterminer le nombre de lignes sorties par l’opérateur Row Count Spool (car les données réelles de la partie interne ne sont pas indispensables) afin d’établir s’il doit renvoyer ou non la ligne externe.

Row Count Spool est un opérateur physique.
Aucune Segment Repartition Dans un plan de requête parallèle, il existe parfois des régions conceptuelles composées d'itérateurs. Tous les itérateurs de ces régions peuvent être exécutés par des threads parallèles. Les régions elles-mêmes doivent être exécutées séquentiellement. Certains itérateurs Parallelism d'une région distincte sont appelés Branch Repartition. L'itérateur Parallelism situé à la limite de deux régions de ce type est appelé Segment Repartition.

Branch Repartition et Segment Repartition sont des opérateurs logiques.
Segment L’opérateur Segment divise le jeu d'entrée en segments en fonction de la valeur d'une ou plusieurs colonnes. Ces colonnes apparaissent en tant qu'arguments dans l'opérateur Segment . L'opérateur génère ensuite un segment à la fois.

Segment est un opérateur logique et physique.
Sequence Project L'opérateur Sequence Project ajoute des colonnes pour effectuer des calculs sur un jeu ordonné. Il divise le jeu d'entrée en segments en fonction de la valeur d'une ou plusieurs colonnes. L'opérateur génère ensuite un segment à la fois. Ces colonnes s'affichent en tant qu'arguments dans l'opérateur Sequence Project .

Sequence Project est un opérateur logique et physique.
Séquence L'opérateur Sequence gère des plans de mise à jour étendus. Il exécute, sur le plan fonctionnel, chaque entrée en séquence (de haut en bas). Chaque entrée est généralement une mise à jour d'un objet différent. Il ne retourne que les lignes provenant de sa dernière entrée (du bas).

Sequence est un opérateur logique et physique.
Instantané L'opérateur Snapshot crée un curseur qui ne voit pas les modifications apportées par les autres.
Sort L'opérateur Sort trie toutes les lignes entrantes. Le volet Properties contient soit un prédicat distinct order by si les doublons sont supprimés par cette opération, soit un prédicat order by accompagné de la liste des colonnes à trier séparées par des virgules. Les colonnes comportent le préfixe ASC si elles sont triées dans l'ordre ascendant, ou le préfixe DESC si elles sont triées dans l'ordre descendant.

Sort est un opérateur logique et physique.
Fractionné L'opérateur Split est utilisé pour optimiser le traitement des mises à jour. Il divise chaque opération de mise à jour en opérations DELETE et INSERT.

L'opérateurSplit est un opérateur logique et physique.
Spool L'opérateur Spool enregistre un résultat de requête intermédiaire dans la base de données tempdb .
Stream Aggregate L'opérateur Stream Aggregate effectue un regroupement d'après une ou plusieurs colonnes et calcule une ou plusieurs expressions d'agrégation retournées par la requête. La sortie de cet opérateur peut être référencée par des opérateurs ultérieurs dans la requête, retournés au client, ou les deux. L'opérateur Stream Aggregate exige que l'entrée suive l'ordre des colonnes dans ses groupes. L'optimiseur utilise un opérateur Sort avant cet opérateur si les données ne sont pas déjà triées en raison d'un opérateur Sort précédent ou d'une recherche ou d'une analyse d'index triée. Dans l’instruction SHOWPLAN_ALL ou dans le plan d’exécution graphique de SQL Server Management Studio, les colonnes du prédicat group by sont répertoriées dans le volet Properties, et les expressions d’agrégation sont répertoriées dans la colonne Defined Values.

Stream Aggregate est un opérateur physique.
Switch Switch est un type particulier d'itérateur de concaténation qui a n entrées. Une expression est associée à chaque opérateur Switch . Selon la valeur renvoyée par l’expression (entre 0 et n-1), Switch copie le flux d’entrée approprié dans le flux de sortie. L'une des utilisations de Switch consiste à implémenter des plans de requête impliquant des curseurs à avance rapide avec certains opérateurs tels que l'opérateur TOP .

Switch est un opérateur logique et physique.
Table Delete L'opérateur physique Table Delete supprime les lignes de la table spécifiée dans le volet Properties du plan d'exécution de requête.

Table Delete est un opérateur physique.
Table Insert L'opérateur Table Insert insère les lignes de son entrée dans la table spécifiée dans le volet Properties du plan d'exécution de requête. Le volet Properties contient également un prédicat set, qui indique la valeur sur laquelle chaque colonne est définie. Si Table Insert ne possède pas d'enfant pour les valeurs insert, la ligne insérée est extraite de l'opérateur Insert lui-même.

Table Insert est un opérateur physique.
Table Merge L'opérateur Table Merge applique un flux de données de fusion à un tas. L'opérateur supprime, met à jour ou insère des lignes dans la table spécifiée dans le volet Properties de l'opérateur. L’opération réelle effectuée dépend de la valeur d’exécution de la propriété ActionColumn

Table Merge est un opérateur physique.
Table Scan L'opérateur Table Scan extrait toutes les lignes de la table spécifiée dans le volet Properties du plan d'exécution de requête. Si un prédicat where figure dans le volet Properties, seules les lignes répondant à ce prédicat sont retournées.

Table Scan est un opérateur logique et physique.
Table Spool L'opérateur Table Spool analyse l'entrée et place une copie de chaque ligne dans une table d'attente cachée, qui est stockée dans la base de données tempdb et qui n'existe que le temps de la requête. Si l’opérateur est réutilisé (par un opérateur Nested Loops , par exemple) mais qu’aucune nouvelle liaison n’est nécessaire, les données mises en attente sont utilisées au lieu d’une nouvelle analyse de l’entrée.

Table Spool est un opérateur physique.
Table Update L'opérateur physique Table Update met à jour les lignes d'entrée de la table spécifiée dans le volet Properties du plan d'exécution de requête. Le prédicat set détermine la valeur de chaque colonne mise à jour. Ces valeurs peuvent être référencées dans la clause SET ou ailleurs dans cet opérateur, et ailleurs dans cette requête.

Table Update est un opérateur physique.
Table-valued Function L’opérateur Fonction table évalue une fonction table (Transact-SQL ou CLR) et stocke les lignes obtenues dans la base de données tempdb. Lorsque les itérateurs parents demandent les lignes, Table-valued Function renvoie les lignes à partir de tempdb.

Les requêtes avec des appels à des fonctions table génèrent des plans de requêtes avec l’itérateur Table-valued Function . Lafonction table peut être évaluée avec différentes valeurs de paramètres :

- Lecteur XML de fonctions table entre un BLOB XML en guise de paramètre et produit un ensemble de lignes représentant des nœuds XML dans l’ordre des documents XML. D'autres paramètres d'entrée peuvent limiter les nœuds XML renvoyés à un sous-ensemble d'un document XML.

- Lecteur XML de fonctions table avec filtre XPath est un type spécial de Fonction table de lecteur XML qui limite la sortie aux nœuds XML qui satisfont à une expression XPath.

Table-valued Function est un opérateur logique et physique.
Top L'opérateur Top analyse l'entrée et retourne uniquement le premier nombre ou pourcentage spécifié de lignes, éventuellement en fonction d'un ordre de tri. Le volet Properties peut contenir la liste des colonnes dont les liaisons sont vérifiées. Dans les plans de mise à jour, l'opérateur Top renforce les limites du nombre de lignes.

Top est un opérateur logique et physique.
Aucune Top N Sort L'itérateurTop N Sort est similaire à l'itérateur Sort , à la différence que seules les N premières lignes sont requises, et non pas la totalité de l'ensemble de résultats. Pour de petites valeurs de N, le moteur d'exécution de requête de SQL Server essaie de réaliser en mémoire la totalité de l'opération de tri. Pour des valeurs élevées de N, le moteur d'exécution de requête recourt à la méthode de tri plus générique, dans laquelle N n'est pas un paramètre.
UDX Les opérateurs UDX (Extended Operators) implémentent l'une des nombreuses opérations XQuery et XPath dans SQL Server.

- L’opérateur étendu (UDX) FOR XML est utilisé pour sérialiser l’ensemble de lignes relationnelles qu’il entre dans la représentation XML dans une colonne BLOB dans une ligne de sortie. Il s'agit d'un opérateur d'agrégation XML qui tient compte de l'ordre.

- L’opérateur étendu (UDX) XML SERIALIZER est un opérateur d’agrégation XML qui tient compte de l’ordre. Il entre des lignes qui représentent des nœuds XML ou des valeurs scalaires XQuery dans un ordre de document XML et produit un objet BLOB XML sérialisé dans une colonne XML dans une ligne de sortie.

- L’opérateur étendu (UDX) XML FRAGMENT SERIALIZER est un type spécial de XML SERIALIZER qui permet de traiter les lignes d’entrée représentant les fragments XML à insérer dans l’extension de modification de données d’insertion XQuery.

- L’opérateur étendu (UDX) XQUERY STRING évalue la valeur de la chaîne XQuery des lignes d’entrée représentant des nœuds XML. Il s'agit d'un opérateur d'agrégation de chaîne qui tient compte de l'ordre. Il produit une ligne avec des colonnes représentant la valeur scalaire XQuery qui contient la valeur de chaîne de l'entrée.

- L’opérateur étendu (UDX) XQUERY LIST DECOMPOSER est un opérateur de décomposition de liste XQuery. Pour chaque ligne d'entrée représentant un nœud XML, il produit une ou plusieurs lignes représentant chacune une valeur scalaire contenant une valeur d'élément de liste si le type d'entrée est une liste XSD.

- L’opérateur étendu (UDX) XQUERY DATA évalue la fonction XQuery fn:data()dans l’entrée représentant des nœuds XML. Il s'agit d'un opérateur d'agrégation de chaîne qui tient compte de l'ordre. Il produit une ligne avec des colonnes représentant la valeur scalaire XQuery qui contient le résultat de fn:data().

- L'opérateur étendu XQUERY CONTAINS évalue la fonction XQuery fn:contains() dans l'entrée représentant des nœuds XML. Il s'agit d'un opérateur d'agrégation de chaîne qui tient compte de l'ordre. Il produit une ligne avec des colonnes représentant la valeur scalaire XQuery qui contient le résultat de fn:contains().

- L’opérateur étendu UPDATE XML NODE met à jour un nœud XML dans l’extension de modification de données de remplacement XQuery dans la méthode modify() dans le type XML.

Tous les opérateurs UDX sont des opérateurs logiques et physiques.
Union L'opérateur Union analyse plusieurs entrées en sortant chaque ligne analysée et en supprimant les doublons.

Union est un opérateur logique.
Update L'opérateur Update met à jour chaque ligne de son entrée dans l'objet spécifié dans le volet Properties du plan d'exécution de requête.

Update est un opérateur logique. L'opérateur physique est Table Update, Index Updateou Clustered Index Update.
Window Spool L'opérateur Window Spool développe chaque ligne dans un ensemble de lignes qui représente la fenêtre qui lui est associée. Dans une requête, la clause OVER définit la fenêtre dans un jeu de résultats de la requête et une fonction de fenêtre calcule ensuite une valeur pour chaque ligne de la fenêtre.

Window Spool est un opérateur logique et physique.

Remarque

De manière générale, la documentation SQL Server utilise le terme B-tree en référence aux index. Dans les index rowstore, le moteur de base de données implémente une structure B+. Cela ne s’applique pas aux index columnstore ou aux index sur les tables à mémoire optimisée. Pour plus d’informations, consultez le Guide de conception et d’architecture d’index SQL Server et Azure SQL.