Référence des opérateurs physiques et logiques

Les opérateurs décrivent comment SQL Server exécute une requête ou une instruction DML (Data Manipulation Language). 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.

Les opérateurs sont classés en opérateurs logiques et physiques. Les opérateurs logiques décrivent une opération de traitement relationnel de la requête à un niveau conceptuel. Les opérateurs physiques mettent véritablement en œuvre l'opération définie par un opérateur logique, à l'aide d'une méthode ou d'un algorithme concret. Par exemple, « join » est une opération logique, tandis que « nested loops joins » est un opérateur physique.

  • 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. Chacun des opérateurs physiques 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 effectuent d'autres types d'opérations : l'opérateur Aggregate calcule une expression contenant les fonctions MIN, MAX, SUM, COUNT ou AVG ; l'opérateur Merge Join permet de réaliser quatres types différents d'opérations de jointure logiques.

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

    • Init() : avec la méthode Init(), l'opérateur physique s'initialise et configure les structures de données nécessaires. Il arrive que l'opérateur physique reçoive beaucoup d'appels Init(), bien qu'en général il n'en reçoive qu'un.

    • GetNext() : Avec la méthode GetNext(), 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 GetNext().

    • Close() : avec la méthode Close(), l'opérateur physique effectue certaines opérations de nettoyage et se ferme. Un opérateur physique reçoit un seul appel Close().

La méthode GetNext() renvoie une ligne de données, et le nombre d'appels qu'elle reçoit s'affiche sous ActualRows dans le résultat Showplan produit au moyen de SET STATISTICS PROFILE ON ou SET STATISTICS XML ON. 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 Init() est appelée. Sauf si un opérateur se trouve sur le côté intérieur d'une jointure de boucles, 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 de Showplan XML produit en utilisant SET STATISTICS XML ON. 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). Sachez que le résultat du Showplan graphique réel affiche des zéros pour les reliaisons réelles et les rembobinages réels lorsqu'ils sont absents. Pour plus d'informations sur les Showplans graphiques, consultez Affichage de plans d'exécution graphique (SQL Server Management Studio).

Un compteur apparenté, ActualEndOfScans, est disponible uniquement si le résultat de Showplan est produit au moyen de SET STATISTICS XML ON. Chaque fois qu'un opérateur physique atteint la fin de son flux de données, le compteur est incrémenté de 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 fins d'analyses ne peut être supérieur à un que si l'opérateur se situe sur le côté intérieur d'une jointure de boucles. Le nombre de fins d'analyses doit être inférieur ou égal au nombre total des reliaisons et des rembobinages.

Les opérateurs physiques correspondent aux algorithmes d'exécution. Index scan/seek, nested loop join, merge join, hash join/aggregation et stream aggregation sont des exemples d'opérateurs physiques. Les opérateurs physiques sont associés à des coûts. Chaque étape de l'exécution d'une requête ou d'une instruction DML implique un opérateur physique.

Mappage d'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 mettra 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.

Dans cette section

Cette section contient la description des opérateurs logiques et physiques suivants :

Aggregate

Merge Interval

Arithmetic Expression

Merge Join

Assert

Nested Loops

Assign

Nonclustered Index Delete

Async Concat

Nonclustered Index Insert

Bitmap

Nonclustered Index Scan

Bitmap Create

Nonclustered Index Seek

Bookmark Lookup

Nonclustered Index Spool

Branch Repartition

Nonclustered Index Update

Broadcast

Online Index Insert

Cache

Parallelism

Clustered Index Delete

Parameter Table Scan

Clustered Index Insert

Partial Aggregate

Clustered Index Merge

Population Query

Clustered Index Scan

Refresh Query

Clustered Index Seek

Remote Delete

Clustered Index Update

Remote Index Scan

Collapse

Remote Index Seek

Compute Scalar

Remote Insert

Concatenation

Remote Query

Constant Scan

Remote Scan

Convert

Remote Update

Cross Join

Repartition Streams

Cursor Catchall

Result

Declare

RID Lookup

Delete

Right Anti Semi Join

Deleted Scan

Right Outer Join

Distinct

Right Semi Join

Distinct Sort

Row Count Spool

Distribute Streams

Segment

Dynamic

Segment Repartition

Eager Spool

Sequence

Fetch Query

SequenceProject

Filter

Snapshot

Flow Distinct

Sort

Full Outer Join

Split

Gather Streams

Spool

Hash Match

Stream Aggregate

Hash Match Root

Switch

Hash Match Team

Table Delete

If

Table Insert

Inner Join

Table Merge

Insert

Table Scan

Inserted Scan

Table Spool

Intrinsic

Table Update

Iterator Catchall

Table-Valued Function

Key Lookup

Top

Keyset

Top N Sort

Language Element Catchall

UDX

Lazy Spool

Union

Left Anti Semi Join

Update

Left Outer Join

While

Left Semi Join

Opérateurs physiques et logiques de curseur

Log Row Scan