Referencia sobre operadores lógicos y físicos

Los operadores describen cómo SQL Server ejecuta una consulta o una instrucción DML (Lenguaje de manipulación de datos). El optimizador de consultas utiliza operadores para generar un plan de consulta con el fin de crear el resultado especificado en la consulta, o bien para realizar la operación especificada en la instrucción DML. El plan de consulta es un árbol que consta de operadores físicos.

Los operadores se clasifican como lógicos y físicos. Los operadores lógicos describen una operación de procesamiento de consulta relacional a nivel conceptual. Los operadores físicos implementan realmente la operación definida por un operador lógico utilizando un método o algoritmo concreto. Por ejemplo, "combinación" es una operación lógica, mientras que "combinaciones de bucles anidados" es un operador físico.

  • Operadores lógicos
    Los operadores lógicos describen la operación algebraica relacional utilizada para procesar una instrucción. En otras palabras, los operadores lógicos describen conceptualmente la operación que se debe realizar.

  • Operadores físicos
    Los operadores físicos implementan la operación descrita por los operadores lógicos. Cada uno de los operadores físicos es un objeto o rutina que realiza una operación. Por ejemplo, algunos operadores físicos obtienen acceso a columnas o filas desde una tabla, índice o vista. Otros operadores físicos realizan otro tipo de operaciones: el operador Aggregate calcula una expresión que contiene MIN, MAX, SUM, COUNT o AVG, y el operador Merge Join realiza distintos tipos de operaciones lógicas join.

    Los operadores físicos se inicializan, recopilan datos y se cierran. Específicamente, el operador físico puede responder a las llamadas de los tres métodos siguientes:

    • Init(): el método Init() hace que un operador físico se inicialice y configure las estructuras de datos necesarias. El operador físico puede recibir numerosas llamadas Init(), aunque suele recibir sólo una.

    • GetNext(): el método GetNext() hace que un operador físico obtenga la primera fila de datos o la siguiente. El operador físico puede recibir ninguna o numerosas llamadas GetNext().

    • Close(): el método Close() hace que un operador físico realice algunas operaciones de limpieza y se cierre. Un operador físico recibe únicamente una llamada de Close().

El método GetNext() devuelve una fila de datos y el número de veces que se llame aparece como ActualRows en los resultados del plan de presentación generado mediante SET STATISTICS PROFILE ON o SET STATISTICS XML ON. Para obtener más información acerca de estas opciones SET, vea SET STATISTICS PROFILE (Transact-SQL) y SET STATISTICS XML (Transact-SQL).

Los recuentos ActualRebinds y ActualRewinds que aparecen en los resultados del plan de presentación hacen referencia al número de veces que se llama al método Init(). A menos que haya un operador en la parte interna de una combinación de bucles, ActualRebinds es igual a uno y ActualRewinds es igual a cero. Si hay un operador en la parte interna de una combinación de bucles, la suma del número de reenlaces y rebobinados es igual al número de filas procesadas en la parte externa de la combinación. Un reenlace significa que uno o más de los parámetros correlativos de la combinación han cambiado y es necesario volver a evaluar la parte interna. Un rebobinado significa que ninguno de los parámetros correlativos ha cambiado y aún se puede volver a utilizar el conjunto de resultados interno anterior.

ActualRebinds y ActualRewinds aparecen en los resultados del plan de presentación XML generado mediante SET STATISTICS XML ON. Sólo se rellenan para los operadores Nonclustered Index Spool, Remote Query, Row Count Spool, Sort, Table Spool y Table-valued Function. ActualRebinds y ActualRewinds también se pueden rellenar para los operadores Assert y Filter cuando el atributo StartupExpression está establecido en TRUE.

Cuando ActualRebinds y ActualRewinds aparecen en un plan de presentación XML, son comparables a EstimateRebinds y EstimateRewinds. Si no aparecen, el número estimado de filas (EstimateRows) es comparable al número real de filas (ActualRows). Tenga en cuenta que si no aparecen, los resultados reales del plan de presentación gráfico muestran ceros para los reenlaces y rebobinados reales. Para obtener más información acerca de los planes de presentación gráficos, vea Mostrar planes de ejecución gráficos (SQL Server Management Studio).

Hay un contador relacionado disponible, ActualEndOfScans, únicamente cuando se generan los resultados del plan de presentación mediante SET STATISTICS XML ON. Siempre que un operador físico alcanza el final de su secuencia de datos, este contador se incrementa en uno. Un operador físico puede alcanzar el final de su secuencia de datos cero, una o varias veces. Al igual que los reenlaces y rebobinados, el número de finales de recorrido puede ser superior a uno únicamente si el operador se encuentra en la parte interna de una combinación de bucles. El número de finales de recorrido debería ser inferior o igual a la suma del número de reenlaces y rebobinados.

Los operadores físicos se corresponden con algoritmos de ejecución. Por ejemplo, son operadores físicos: exploración o búsqueda en índices, combinación de bucles anidados, combinación de mezcla, agregación o combinación hash, agregación de secuencias. Los operadores físicos tienen costos asociados. Cada paso de la ejecución de una consulta o instrucción DML implica un operador físico.

Asignar operadores físicos y lógicos

El optimizador de consultas crea un plan de consulta con forma de árbol que consta de operadores lógicos. Una vez que el optimizador de consultas ha creado el plan, elige el operador físico más eficaz para cada operador lógico. El optimizador de consultas utiliza un método basado en el costo para determinar el operador físico que implementará un operador lógico.

Normalmente, varios operadores físicos pueden implementar una operación lógica. Sin embargo, en pocas ocasiones un operador físico puede implementar varias operaciones lógicas también.

En esta sección

Esta sección describe los siguientes operadores lógicos y físicos:

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

Exploración de índice remota

Collapse

Index seek remoto

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

Operadores lógicos y físicos de cursores

Log Row Scan