Compartir a través de


Referencia de operadores lógicos y físicos del plan de presentación

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 usa operadores para generar un plan de consulta con el fin de crear el resultado especificado en la consulta o para realizar la operación especificada en la instrucción DML. El plan de consulta es un árbol que consta de operadores físicos. Puede ver el plan de consulta mediante las instrucciones SET SHOWPLAN, las opciones gráficas del plan de ejecución de SQL Server Management Studio o las clases de eventos Showplan de SQL Server Profiler.

Los operadores se clasifican como lógicos y físicos.

  • Operadores lógicos
    Los operadores lógicos describen la operación algebraica relacional usada 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 operador físico 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 otras operaciones como cálculos, agregaciones, comprobaciones de integridad de datos o combinaciones. Los operadores físicos tienen costos asociados.

    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 solo 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. Solo 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.

    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 flujo de datos, este contador se incrementa en uno. Un operador físico puede alcanzar el final de su flujo 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.

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.

Descripción del operador

Esta sección contiene las descripciones de los operadores lógicos y físicos.

Icono del plan de ejecución gráfico

Operador de plan de presentación

Descripción

Ninguno

Aggregate

El operador Aggregate calcula una expresión que contiene MIN, MAX, SUM, COUNT o AVG. El operador Aggregate puede ser un operador lógico o físico.

Icono del operador Arithmetic Expression

Arithmetic Expression

El operador Arithmetic Expression calcula un nuevo valor a partir de los valores de una fila. Arithmetic Expression no se usa en SQL Server 2012.

Icono del operador Assert

Assert

El operador Assert comprueba una condición. Por ejemplo, valida la integridad referencial o se asegura de que una subconsulta escalar devuelve una fila. Por cada fila de entrada, el operador Assert evalúa la expresión de la columna Argument del plan de ejecución. Si la expresión da como resultado NULL, la fila se pasa a través del operador Assert y continúa la ejecución de la consulta. Si la expresión da como resultado un valor distinto a NULL, se generará el error apropiado. Assert es un operador físico.

Icono del elemento del lenguaje Assign

Assign

El operador Assign asigna el valor de una expresión o una constante a una variable. Assign es un elemento del lenguaje.

Ninguno

Asnyc Concat

El operador Asnyc Concat solo se usa en consultas remotas (consultas distribuidas). Tiene n nodos secundarios y un nodo primario. Algunos de los nodos secundarios suelen ser equipos remotos que participan en una consulta distribuida. Asnyc Concat emite llamadas open() a todos los nodos secundarios a la vez y, a continuación, asigna un mapa de bits a cada uno de estos nodos. Por cada bit que sea un 1, Async Concat envía las filas de salida a petición al nodo primario.

Icono del operador Bitmap

Bitmap

SQL Server usa al operador Bitmap para implementar filtros de mapas de bits en planes de consulta paralelos. Los filtros de mapas de bits agiliza la ejecución de la consulta al eliminar las filas con valores de clave que no pueden generar ningún registro de combinación antes de pasar las filas a través de otro operador, por ejemplo, el operador Parallelism. Un filtro de mapas de bits usa una representación compacta de un conjunto de valores de una tabla en una parte del árbol de operadores para filtrar filas de una segunda tabla en otra parte del árbol. Al quitar las filas innecesarias en las primeras fases de la consulta, los operadores subsiguientes tienen que trabajar en menos filas y el rendimiento total de la consulta mejora. El optimizador determina cuándo un mapa de bits es suficientemente selectivo para resultar útil y en qué operadores se aplica el filtro. Bitmap es un operador físico.

Icono del operador Bitmap

Bitmap Create

El operador Bitmap Create aparece en el resultado del plan de presentación en la que se generan los mapas de bits. Bitmap Create es un operador lógico.

Icono del operador Bookmark Lookup

Bookmark Lookup

El operador Bookmark Lookup usa un marcador (identificador de fila o clave de agrupación en clústeres) para buscar la fila correspondiente en la tabla o índice clúster. La columna Argument contiene la etiqueta del marcador utilizado para buscar la fila en la tabla o el índice clúster. La columna Argument también contiene el nombre de la tabla o el índice clúster donde se busca la fila. Si en la columna Argument aparece la cláusula WITH PREFETCH, el procesador de consultas habrá determinado que resulta óptimo usar una captura previa asincrónica (lectura anticipada) al buscar marcadores en la tabla o el índice clúster.

Bookmark Lookup no se usa en SQL Server 2012. En su lugar, Clustered Index Seek y RID Lookup proporcionan la funcionalidad de búsqueda de marcadores. El operador Key Lookup también proporciona esta funcionalidad.

Ninguno

Branch Repartition

En un plan de consulta paralelo, a veces hay regiones conceptuales de iteradores. Todos los iteradores de una región así se pueden ejecutar mediante subprocesos paralelos. Las regiones en sí deben ejecutarse en serie. Algunos de los iteradores Parallelism de una región individual se denominan Branch Repartition. El iterador Parallelism situado en el límite de dos de estas regiones se denomina Segment Repartition. Branch Repartition y Segment Repartition son operadores lógicos.

Ninguno

Broadcast

Broadcast tiene un nodo secundario y n nodos principales. Broadcast envía las filas de entrada a varios consumidores a petición. Cada consumidor recibe todas las filas. Por ejemplo, si todos los consumidores son lados de compilación de una combinación hash, se generarán n copias de las tablas hash.

Icono de operador de hash de compilación

Build Hash

Indica la compilación de una tabla hash del lote para un índice optimizado memoria de columnstore de xVelocity.

None

Cache

Cache es una versión especializada del operador Spool. Almacena solo una fila de datos. Cache es un operador lógico. Cache no se usa en SQL Server 2012.

Icono del operador Eliminación en índice clúster

Clustered Index Delete

El operador Clustered Index Delete elimina filas del índice clúster especificado en la columna Argument del plan de ejecución de consulta. Si hay un predicado WHERE:() en la columna Argument, solo se eliminan las filas que cumplen el predicado.Clustered Index Delete es un operador físico.

Icono del operador Inserción en índice clúster

Clustered Index Insert

El operador del plan de presentación Clustered Index Insert inserta filas desde su entrada en el índice clúster especificado en la columna Argument. La columna Argument contiene también un predicado SET:(), que indica el valor en el que se establece cada columna. Si Clustered Index Insert no tiene elementos secundarios para los valores de inserción, se obtendrá la fila insertada del operador Insert.Clustered Index Insert es un operador físico.

Operador Mezcla de índice clúster

Clustered Index Merge

El operador Clustered Index Merge aplica un flujo de datos de mezcla a un índice clúster. El operador elimina, actualiza o inserta filas del índice clúster especificado en la columna Argumento del operador. La operación real ejecutada depende del valor de tiempo de ejecución de la columna ACCIÓN especificada en la columna Argument del operador. Clustered Index Merge es un operador físico.

Icono del operador Examen de índice clúster

Clustered Index Scan

El operador Clustered Index Scan examina el índice clúster especificado en la columna Argument del plan de ejecución de consulta. Si hay un predicado WHERE:() opcional, solo se devuelven las filas que lo cumplen. Si la columna Argument contiene la cláusula ORDERED, el procesador de consultas ha solicitado que la salida de las filas se devuelva en el orden en que las haya ordenado el índice clúster. Si no hay una cláusula ORDERED, el motor de almacenamiento recorre el índice de la forma óptima (sin tener que ordenar el resultado). Clustered Index Scan es un operador lógico y físico.

Icono del operador Búsqueda en índice clúster

Clustered Index Seek

El operador Clustered Index Seek usa la capacidad de búsqueda de los índices para recuperar filas de un índice clúster. La columna Argument contiene el nombre del índice clúster que se va a utilizar y el predicado SEEK:(). El motor de almacenamiento utiliza el índice para procesar solamente las filas que cumplen el predicado SEEK:(). También puede incluir un predicado WHERE:() en el que el motor de almacenamiento determine todas las filas que cumplan el predicado SEEK:(), aunque este predicado es opcional y no utiliza índices para completar el proceso.

Si la columna Argument contiene la cláusula ORDERED, significa que el procesador de consultas ha determinado que se deben devolver las filas en el orden en el que el índice clúster las haya clasificado. Si no hay una cláusula ORDERED, el motor de almacenamiento busca el índice de la forma óptima (sin tener que ordenar el resultado). Permitir que el resultado conserve su ordenación puede ser menos eficiente que generar un resultado no ordenado. Si aparece la palabra clave LOOKUP, significa que se está realizando una búsqueda de marcadores. En SQL Server 2008 y versiones posteriores, el operador Key Lookup proporciona la función de búsqueda de marcadores. Clustered Index Seek es un operador lógico y físico.

Icono del operador Actualización de índice clúster

Clustered Index Update

El operador Clustered Index Update actualiza las filas del índice clúster especificado en la columna Argument. Si está presente un predicado WHERE:(), solo se actualizan las filas que cumplan el predicado. Si hay un predicado SET:(), se asigna este valor a todas las filas actualizadas. Si hay un predicado DEFINE:(), se muestran los valores que define este operador. Se puede hacer referencia a estos valores en la cláusula SET o en cualquier parte del operador, y en cualquier parte de esta consulta. Clustered Index Update es un operador lógico y físico.

Icono del operador Collapse

Collapse

El operador Collapse optimiza el proceso de actualización. Cuando se realiza una actualización, esta se puede dividir (con el operador Split) en una eliminación y una inserción. La columna Argument contiene una cláusula GROUP BY:() que especifica una lista de columnas de clave. Si el procesador de consultas encuentra filas adyacentes que eliminan e insertan los mismos valores clave, reemplazará estas operaciones independientes por una única operación de actualización más eficaz. Collapse es un operador lógico y físico.

Exploración de índice de almacén de columnas

Columnstore Index Scan

El operador Columnstore Index Scan recorre el índice columnstore especificado en la columna Argument del plan de ejecución de consulta.

Icono del operador Compute Scalar

Compute Scalar

El operador Compute Scalar evalúa una expresión para generar un valor escalar calculado. que se puede devolver al usuario, hacer referencia a él en cualquier otra parte de la consulta, o ambas cosas a la vez, por ejemplo, en un predicado de filtro o de combinación. Compute Scalar es un operador lógico y físico.

Es posible que los operadores Compute Scalar que aparecen en planes de presentación generados por SET STATISTICS XML no contengan el elemento RunTimeInformation. En planes de presentación gráficos, es posible que las opciones Número de filas real, Reenlaces reales y Rebobinados reales no aparezcan en la ventana Propiedades cuando la opción Incluir plan de ejecucion real está seleccionada en SQL Server Management Studio. Si esto ocurre, significa que, aunque estos operadores se han utilizado en el plan de consulta compilado, otros operadores han realizado su trabajo en el plan de consulta en tiempo de ejecución. Tenga en cuenta también que el número de ejecuciones en el resultado del plan de presentación generado por SET STATISTICS PROFILE es equivalente a la suma de reenlaces y rebobinados de planes de presentación generados por SET STATISTICS XML.

Icono del operador Concatenation

Concatenation

El operador Concatenation explora varias entradas y devuelve cada fila explorada. Normalmente, Concatenation se utiliza para implementar la construcción UNION ALL de Transact-SQL. El operador físico Concatenation tiene dos o más entradas y una salida. Concatenation copia filas del primer flujo de entrada en el flujo de salida y, a continuación, repite esta operación con cada flujo de entrada adicional. Concatenation es un operador lógico y físico.

Icono del operador Constant Scan

Constant Scan

El operador Constant Scan escribe una o varias filas de constantes en una consulta. El operador Compute Scalar se suele usar después de Constant Scan para agregar columnas a una fila generada por él mismo.

Icono del elemento del lenguaje Convert (motor de base de datos)

Convert

El operador Convert convierte un tipo de datos escalar en otro. Convert es un elemento del lenguaje.

Ninguno

Cross Join

El operador Cross Join combina cada fila de la primera entrada (superior) con cada fila de la segunda entrada (inferior). Cross Join es un operador lógico.

Icono del operador de cursor de selección de cursor (catchall)

catchall

El icono de selección (catchall) se muestra cuando la lógica que genera planes de presentación gráficos no puede encontrar un icono adecuado para el iterador. Este icono no indica necesariamente una condición de error. Hay tres iconos de selección (catchall): azul (para iteradores), naranja (para cursores) y verde (para elementos del lenguaje Transact-SQL).

Ninguno

Cursor

Los operadores lógicos y físicos Cursor se usan para describir cómo se ha ejecutado una consulta o una actualización que implican la ejecución de operaciones con cursores. Los operadores físicos describen el algoritmo físico de implementación utilizado para procesar el cursor, por ejemplo, con un cursor dinámico. Cada paso de la ejecución de un cursor implica un operador físico. Los operadores lógicos describen una propiedad del cursor, como, por ejemplo, si el cursor es de solo lectura.

Los operadores lógicos incluyen asincrónico, optimista, principal, solo lectura, bloqueos de desplazamiento, y secundario y sincrónico.

Los operadores físicos incluyen Dynamic, Fetch Query, Keyset, Population Query, Refresh Query y Snapshot.

Icono del elemento del lenguaje Declare

Declare

El operador Declare asigna una variable local en el plan de consulta. Declare es un elemento del lenguaje.

Icono del operador Delete (motor de base de datos)

Delete

El operador Delete elimina de un objeto las filas que satisfacen el predicado opcional de la columna Argument.

Icono del operador Delete scan

Deleted Scan

El operador Deleted Scan recorre la tabla eliminada en un desencadenador.

Ninguno

Distinct

El operador Distinct quita los duplicados de un conjunto de filas o de una colección de valores. Distinct es un operador lógico.

Ninguno

Distinct Sort

El operador lógico Distinct Sort recorre la entrada, quita los duplicados y ordena por las columnas especificadas en el predicado ORDER BY:() de la columna Argument. Distinct Sort es un operador lógico.

Icono del operador de paralelismo Distribute streams

Distribute Streams

El operador Distribute Streams solo se usa en los planes de consulta paralelos. El operador Distribute Streams utiliza una solo flujo de entrada de registros y genera varios flujos de salida. No se cambia el contenido de los registros ni su formato. Cada registro del flujo de entrada aparece en uno de los flujos de salida. Este operador conserva automáticamente el orden relativo de los registros de entrada en los flujos de salida. Normalmente, se utilizan algoritmos hash para decidir a qué flujo de salida pertenece un determinado registro de entrada.

Si la salida tiene particiones, la columna Argument contiene un predicado PARTITION COLUMNS:() y las columnas de particiones. Distribute Streams es un operador lógico

Icono del operador de cursor dinámico

Dynamic

El operador Dynamic usa un cursor que puede ver todos los cambios que han realizado otros usuarios.

Icono del operador Spool

Eager Spool

El operador Eager Spool usa la entrada completa y almacena cada fila en un objeto temporal oculto almacenado en la base de datos tempdb. Si se hace retroceder el operador (por ejemplo, mediante un operador Nested Loops) pero no es necesario volver a enlazar, se utilizan los datos de la cola en lugar de volver a recorrer la entrada. Si es necesario volver a enlazar, se descartan los datos y se vuelve a generar el objeto de la cola; para ello se vuelve a recorrer la entrada (se vuelve a enlazar). El operador Eager Spool crea su archivo de cola de forma "ansiosa": cuando el operador primario de la cola solicita la primera fila, el operador de cola consume todas las filas de su operador de entrada y las almacena en la cola. Eager Spool es un operador lógico.

Icono del operador de cursor Fetch Query

Fetch Query

El operador Fetch Query recupera filas cuando se emite una captura en un cursor.

Icono del operador Filter (motor de base de datos)

Filter

El operador Filter recorre la entrada y solo devuelve las filas que cumplen la expresión del filtro (predicado) que aparece en la columna Argument.

Ninguno

Flow Distinct

El operador lógico Flow Distinct recorre la entrada y quita los duplicados. Mientras que el operador Distinct procesa todas las entradas antes de obtener resultados, el operador FlowDistinct devuelve cada fila a medida que se obtiene de la entrada (a menos que la fila esté duplicada, en cuyo caso se descarta).

Ninguno

Full Outer Join

El operador lógico Full Outer Join devuelve cada fila que cumple el predicado de combinación de la primera entrada (superior) combinada con cada fila de la segunda entrada (inferior). También devuelve filas de:

  • La primera entrada que no tenga coincidencias en la segunda entrada.

  • La segunda entrada que no tenga coincidencias en la primera entrada.

La entrada que no contiene valores coincidentes se devuelve como un valor nulo. Full Outer Join es un operador lógico.

Icono del operador de paralelismo Gather streams

Gather Streams

El operador Gather Streams solo se usa en planes de consulta paralelos. El operador Gather Streams procesa varios flujos de entrada y produce un único flujo de salida de registros combinando los flujos de entrada. No se cambia el contenido de los registros ni su formato. Si este operador conserva el orden, todos los flujos de entrada deben estar ordenados. Si se ordena la salida, la columna Argument contiene un predicado ORDER BY:() y los nombres de las columnas que se ordenan. Gather Streams es un operador lógico.

Icono del operador Hash Match

Hash Match

El operador Hash Match genera una tabla hash y calcula un valor hash para cada fila de su entrada de compilación. En la columna Argument aparece un predicado HASH:() con una lista de las columnas utilizadas para crear un valor hash. A continuación, por cada fila de sondeo (como corresponda), calcula un valor hash (con la misma función hash) y busca las coincidencias en la tabla hash. Si hay un predicado residual (identificado mediante RESIDUAL:() en la columna Argument), ese predicado también debe cumplirse para que una fila se considere una coincidencia. El comportamiento depende de la operación lógica que se esté realizando:

  • Para cualquier combinación, utilice la primera entrada (superior) para generar la tabla hash y la segunda entrada (inferior) para sondear la tabla hash. Obtendrá como resultado las coincidencias (o las no coincidencias) que indique el tipo de combinación. Si varias combinaciones utilizan la misma columna de combinación, estas operaciones se agrupan en un equipo hash.

  • Para los operadores Distinct o Aggregate, utilice la entrada para generar la tabla hash (para ello, quite los duplicados y calcule las expresiones de agregado). Cuando se haya generado la tabla hash, recorra la tabla y presente todas las entradas.

  • En el caso del operador Union, utilice la primera entrada para generar la tabla hash (para ello, quite los duplicados). Use la segunda entrada (que no debe tener duplicados) para sondear la tabla hash, devolver todas las filas que no tengan coincidencias y, a continuación, recorrer la tabla hash para devolver todas las entradas.

Hash Match es un operador físico.

Icono del elemento del lenguaje If

If

El operador If lleva a cabo el procesamiento condicional basado en una expresión. If es un elemento del lenguaje.

Ninguno

Inner Join

El operador lógico Inner Join devuelve todas las filas que cumplen la combinación de la primera entrada (superior) con la segunda entrada (inferior).

Icono del operador Insert (motor de base de datos)

Insert

El operador lógico Insert inserta cada fila de su entrada en el objeto especificado en la columna Argument. El operador físico es Table Insert, Index Insert o Clustered Index Insert

Icono del operador Inserted Scan

Inserted Scan

El operador Inserted Scan recorre la tabla insertada. Inserted Scan es un operador lógico y físico.

Icono del elemento del lenguaje Intrinsic

Intrinsic

El operador Intrinsic invoca una función Transact-SQL interna. Intrinsic es un elemento del lenguaje.

Icono del operador de selección (catchall) de iterador

Iterator

El icono de selección (catchall) Iterator se muestra cuando la lógica que genera planes de presentación gráficos no puede encontrar un icono adecuado para el iterador. Este icono no indica necesariamente una condición de error. Hay tres iconos de selección (catchall): azul (para iteradores), naranja (para cursores) y verde (para construcciones del lenguaje Transact-SQL).

Icono del operador Bookmark Lookup

Key Lookup

El operador Key Lookup es una búsqueda de marcadores en un tabla con un índice clúster. La columna Argument contiene el nombre del índice clúster y la clave de agrupación en clústeres utilizada para buscar la fila en el índice clúster. Key Lookup está siempre acompañado por un operador Nested Loops. Si en la columna Argument aparece la cláusula WITH PREFETCH, el procesador de consultas habrá determinado que resulta óptimo usar una captura previa asincrónica (lectura anticipada) al buscar marcadores en el índice clúster.

El uso de un operador Key Lookup en un plan de consulta indica que la consulta puede beneficiarse de la optimización del rendimiento. Por ejemplo, el rendimiento de las consultas se puede mejorar al agregar un índice de cobertura.

Icono del operador de cursor Keyset

Keyset

El operador Keyset usa un cursor que puede ver las actualizaciones, pero no las inserciones que realizan los demás.

Icono de selección (catchall) de elementos de lenguaje

Language Element

El icono de selección (catchall) Language Element se muestra cuando la lógica que genera planes de presentación gráficos no puede encontrar un icono adecuado para el iterador. Este icono no indica necesariamente una condición de error. Hay tres iconos de selección (catchall): azul (para iteradores), naranja (para cursores) y verde (para construcciones del lenguaje Transact-SQL).

Icono del operador Spool

Lazy Spool

El operador lógico Lazy Spool almacena cada fila de su entrada en un objeto temporal oculto almacenado en la base de datos tempdb. Si se hace retroceder el operador (por ejemplo, mediante un operador Nested Loops) pero no es necesario volver a enlazar, se utilizan los datos de la cola en lugar de volver a recorrer la entrada. Si es necesario volver a enlazar, se descartan los datos y se vuelve a generar el objeto de la cola; para ello se vuelve a recorrer la entrada (se vuelve a enlazar). El operador Lazy Spool crea su archivo de cola de un modo "perezoso", es decir, cada vez que el operador principal de la cola pide una fila, el operador de cola obtiene una fila de su operador de entrada y la almacena en la cola, en lugar de consumir todas las filas de una vez. Lazy Spool es un operador lógico.

Ninguno

Left Anti Semi Join

El operador Left Anti Semi Join devuelve todas las filas de la primera entrada (superior) cuando no hay ninguna fila coincidente en la segunda entrada (inferior). Si no hay ningún predicado de combinación en la columna Argument, cada fila es una fila coincidente. Left Anti Semi Join es un operador lógico.

Ninguno

Left Outer Join

El operador Left Outer Join devuelve cada fila que cumple la combinación de la primera entrada (superior) con la segunda entrada (inferior). También devuelve las filas de la primera entrada que no tienen filas coincidentes en la segunda entrada. Las filas que no coinciden en la segunda entrada se devuelven como valores NULL. Si no hay ningún predicado de combinación en la columna Argument, cada una de las filas es coincidente. Left Outer Join es un operador lógico.

Ninguno

Left Semi Join

El operador Left Semi Join devuelve todas las filas de la primera entrada (superior) cuando hay una fila coincidente en la segunda entrada (inferior). Si no hay ningún predicado de combinación en la columna Argument, cada fila es una fila coincidente. Left Semi Join es un operador lógico.

Icono del operador Log Row Scan

Log Row Scan

El operador Log Row Scan recorre el registro de transacciones. Log Row Scan es un operador lógico y físico.

Icono del operador Merge interval

Merge Interval

El operador Merge Interval combina varios intervalos (que pueden superponerse) para producir intervalos mínimos que no se superponen y que se usan para buscar entradas de índice. Este operador aparece normalmente sobre uno o más operadores Compute Scalar sobre operadores Constant Scan, que construyen los intervalos (representados como columnas de una fila) que combina este operador. Merge Interval es un operador lógico y físico.

Icono del operador Merge join

Merge Join

El operador Merge Join realiza las siguientes operaciones lógicas de combinación interna (inner join), combinación externa izquierda (left outer join), semicombinación izquierda (left semi join), antisemicombinación izquierda (left anti semi join), combinación externa derecha (right outer join), semicombinación derecha (right semi join), antisemicombinación derecha (right anti semi join) y unión (union).

En la columna Argument, el operador Merge Join contiene un predicado MERGE:() si la operación realiza una combinación uno a varios, o un predicado MANY-TO-MANY MERGE:() si la operación realiza una combinación varios a varios. La columna Argument incluye una lista separada por comas de las columnas utilizadas para realizar la operación. El operador Merge Join requiere dos entradas ordenadas por sus respectivas columnas, que se pueden realizar mediante la inserción de operaciones de ordenación explícitas en el plan de consulta. El operador Merge Join es especialmente eficaz si no se necesita un orden explícito, por ejemplo, si hay un índice idóneo de árbol b en la base de datos o si el orden se puede aprovechar en varias operaciones, como en una combinación de mezcla y una agrupación con acumulación. Merge Join es un operador físico.

Icono del operador Nested Loops

Nested Loops

El operador Nested Loops realiza las operaciones lógicas de combinación interna, combinación externa izquierda, semicombinación izquierda y anti semicombinación. Las combinaciones de bucles anidados buscan en la tabla interna cada fila de la tabla externa, normalmente mediante un índice. El procesador de consultas decide, en función de los costos anticipados, si debe ordenar o no la entrada externa para mejorar la ubicación de las búsquedas en el índice de la entrada interna. Se devuelven las filas que cumplen el predicado (opcional) de la columna Argument (como corresponda según la operación lógica que se realiza). Nested Loops es un operador físico.

Icono del operador Nonclustered Index Delete

Nonclustered Index Delete

El operador Nonclustered Index Delete elimina las filas de entrada del índice no clúster especificado en la columna Argument. Nonclustered Index Delete es un operador físico.

Icono del operador Nonclustered Index Insert

Index Insert

El operador Index Insert inserta filas de su entrada en el índice no clúster especificado en la columna Argument. La columna Argument también contiene un predicado SET:(), que indica el valor en el que se establece cada columna. Index Insert es un operador físico.

Icono del operador Nonclustered Index Scan

Index Scan

El operador Index Scan recupera todas las filas del índice no clúster especificadas en la columna Argument. Si aparece un predicado opcional WHERE:() en la columna Argument, solo se devuelven las filas que cumplan el predicado. Index Scan es un operador lógico y físico.

Icono del operador Nonclustered Index Seek

Index Seek

El operador Index Seek usa la capacidad de búsqueda de los índices para recuperar filas de un índice no clúster. La columna Argument contiene el nombre del índice no clúster utilizado. También contiene el predicado SEEK:(). El motor de almacenamiento utiliza el índice para procesar solamente las filas que cumplen el predicado SEEK:(). También se puede incluir un predicado WHERE:(), predicado que evaluará el motor de almacenamiento respecto a todas las filas que cumplan el predicado SEEK:() (no se utilizan los índices para esta comprobación). Si la columna Argument contiene la cláusula ORDERED, significa que el procesador de consultas ha determinado que se deben devolver las filas en el orden en el que el índice no clúster las haya clasificado. Si no hay una cláusula ORDERED, el motor de almacenamiento busca el índice de la forma óptima (que no garantiza que el resultado se ordene). Permitir que el resultado mantenga su ordenación puede ser menos eficiente que generar un resultado no ordenado. Index Seek es un operador lógico y físico.

Icono del operador Nonclustered Index Spool

Index Spool

El operador físico Index Spool contiene un predicado SEEK:() en la columna Argument. El operador Index Spool recorre sus filas de entrada, coloca una copia de cada fila en un archivo de cola oculto (almacenado en la base de datos tempdb y que solo existe durante la duración de la consulta) y genera un índice no clúster en las filas. Esto permite utilizar la capacidad de búsqueda de los índices para presentar solo las filas que cumplan el predicado SEEK:(). Si se hace retroceder el operador (por ejemplo, mediante un operador Nested Loops) pero no es necesario volver a enlazar, se usan los datos de la cola en lugar de volver a recorrer la entrada.

Icono del operador Nonclustered Index Update

Nonclustered Index Update

El operador físico Nonclustered Index Update actualiza las filas de su entrada en el índice no clúster especificado en la columna Argument. Si hay un predicado SET:(), se asigna este valor a todas las filas actualizadas. Nonclustered Index Update es un operador físico.

Icono del operador Online Index Insert

Online Index Insert

El operador físico Online Index Insert indica que una operación de crear, modificar o colocar índice se realiza en línea. Es decir, los datos de la tabla subyacente permanecen disponible para los usuarios durante la operación de índice.

Ninguno

Parallelism

El operador Parallelism realiza las operaciones lógicas Distribute Streams, Gather Streams y Repartition Streams. Las columnas Argument pueden contener un predicado PARTITION COLUMNS:() con una lista separada por comas de las columnas que se van a particionar. Las columnas Argument también pueden contener un predicado ORDER BY:(), con una lista de las columnas que deben conservar el criterio de ordenación durante la partición. Parallelism es un operador físico.

[!NOTA]

Si se ha compilado una consulta como consulta paralela, aunque en tiempo de ejecución se ejecute como consulta en serie, el resultado del plan de presentación generado por SET STATISTICS XML o gracias al uso de la opción Incluir plan de ejecución real de SQL Server Management Studio no contendrá el elemento RunTimeInformation del operador Parallelism. En el resultado de SET STATISTICS PROFILE, el recuento real de filas y el número real de ejecuciones mostrará ceros para el operador Parallelism. Cuando se produzca alguna de estas condiciones, eso significará que el operador Parallelism solo se ha utilizado durante la compilación de la consulta y no en el plan de consulta en tiempo de ejecución. Tenga en cuenta que a veces los planes de consulta paralelos se ejecutan en serie si existe una elevada carga simultánea en el servidor.

Icono del operador Parameter Table Scan

Parameter Table Scan

El operador Parameter Table Scan recorre una tabla que actúa como parámetro en la consulta actual. Normalmente, se usa para consultas INSERT en un procedimiento almacenado. Parameter Table Scan es un operador lógico y físico.

Ninguno

Partial Aggregate

Partial Aggregate se usa en planes paralelos. Aplica una función de agregación a tantas filas de entrada como sea posible para que la escritura en el disco (también denominada "volcado") no sea necesaria. Hash Match es el único operador físico (iterador) que implementa el agregado de la partición. Partial Aggregate es un operador lógico.

Icono del operador de cursor Population Query

Population Query

El operador Population Query rellena la tabla de trabajo de un cursor cuando se abre el cursor.

Icono del operador de cursor Refresh Query

Refresh Query

El operador Refresh Query captura los datos actuales de las filas del búfer de lectura.

Icono del operador Remote Delete

Remote Delete

El operador Remote Delete elimina las filas de entrada de un objeto remoto. Remote Delete es un operador lógico y físico.

operador de index seek showplan remoto

Remote Index Scan

El operador Remote Index Scan examina el índice remoto especificado en la columna Argument. Remote Index Scan es un operador lógico y físico.

operador de index seek showplan remoto

Remote Index Seek

El operador Remote Index Seek usa la capacidad de búsqueda de un objeto de índice remoto para recuperar filas. La columna Argument contiene el nombre del índice remoto que se va a usa y el predicado SEEK:(). Remote Index Seek es un operador lógico y físico.

Icono del operador Remote Insert

Remote Insert

El operador Remote Insert inserta las filas de entrada en un objeto remoto. Remote Insert es un operador lógico y físico.

Icono del operador Remote Query

Remote Query

El operador Remote Query envía una consulta a un origen remoto. El texto de la consulta enviada al servidor remoto aparece en la columna Argument. Remote Query es un operador lógico y físico.

Icono del operador Remote Scan

Remote Scan

El operador Remote Scan recorre un objeto remoto. El nombre del objeto remoto aparece en la columna Argument. Remote Scan es un operador lógico y físico.

Icono del operador Remote Update

Remote Update

El operador Remote Update actualiza las filas de entrada en un objeto remoto. Remote Update es un operador lógico y físico.

Icono del operador de paralelismo Repartition streams

Repartition Streams

El operador Repartition Streams usa varios flujos y produce varios flujos de registros. No se cambia el contenido de los registros ni su formato. Si el optimizador de consultas usa un filtro de mapas de bits, se reduce el número de filas del flujo de salida. Cada registro de un flujo de entrada se coloca en un flujo de salida. Si el operador conserva el orden, se deben ordenar y mezclar todos los flujos de entrada en varios flujos de salida ordenados. Si el resultado está dividido en particiones, la columna Argument contiene un predicado PARTITION COLUMNS:() y las columnas de particiones. Si el resultado está ordenado, la columna Argument contiene un predicado ORDER BY:() y las columnas que se ordenan. Repartition Streams es un operador lógico. Este operador solo se usa en los planes de consulta paralelos.

Icono del elemento del lenguaje Result

Result

El operador Result incluye los datos devueltos al final de un plan de consulta. Suele ser el elemento raíz de un plan de presentación. Result es un elemento del lenguaje.

Icono del operador RID Lookup

RID Lookup

RID Lookup es una búsqueda de marcadores en un montón que usa un identificador de fila suministrado (RID). La columna Argument contiene la etiqueta de marcador utilizada para buscar la fila en la tabla y el nombre de la tabla en la que se busca la fila. RID Lookup siempre va acompañado de NESTED LOOP JOIN. RID Lookup es un operador físico. Para obtener más información sobre las búsquedas por marcador, vea "Bookmark Lookup" (en inglés) en el blog de SQL Server en MSDN.

Ninguno

Right Anti Semi Join

El operador Right Anti Semi Join muestra todas las filas de la segunda entrada (inferior) para las que no hay una fila coincidente en la primera entrada (superior). Una fila coincidente se define como aquella que cumple el predicado de la columna Argument (si no hay un predicado, cada fila es una fila coincidente). Right Anti Semi Join es un operador lógico.

Ninguno

Right Outer Join

El operador Right Outer Join devuelve cada fila que cumple la combinación de la segunda entrada (inferior) con cada fila coincidente de la primera entrada (superior). También devolverá las filas de la segunda entrada que no tengan filas coincidentes en la primera entrada, combinadas con NULL (nulo). Si no hay ningún predicado de combinación en la columna Argument, cada una de las filas es coincidente. Right Outer Join es un operador lógico.

Ninguno

Right Semi Join

El operador Right Semi Join devuelve todas las filas de la segunda entrada (inferior) para las que haya una fila coincidente en la primera entrada (superior). Si no hay ningún predicado de combinación en la columna Argument, cada fila es una fila coincidente. Right Semi Join es un operador lógico.

Icono del operador Row Count Spool

Row Count Spool

El operador Row Count Spool recorre la entrada, cuenta el número de filas que hay y devuelve ese número de filas sin datos. Este operador se utiliza cuando es importante comprobar la existencia de las filas, en lugar de los datos que éstas contienen. Por ejemplo, si un operador Nested Loops realiza una operación Left Semi Join y el predicado de combinación se aplica a la entrada interna, se puede colocar una cola de recuento de filas en la parte superior de la entrada interior del operador Nested Loops. A continuación, el operador Nested Loops puede calcular el número de filas que obtiene la cola de recuento de filas (dado que los datos reales del lado interno no son necesarios) para determinar si se devolverá la fila externa. Row Count Spool es un operador físico.

Icono del operador Segment

Segment

Segment es un operador físico y lógico. Divide el conjunto de entrada en segmentos basados en el valor de una o varias columnas. Estas columnas se muestran como argumentos en el operador Segment. A continuación, el operador muestra un segmento cada vez.

Ninguno

Segment Repartition

En un plan de consulta paralelo, a veces hay regiones conceptuales de iteradores. Todos los iteradores de una región así se pueden ejecutar mediante subprocesos paralelos. Las regiones en sí deben ejecutarse en serie. Algunos de los iteradores Parallelism de una región individual se llaman Branch Repartition. El iterador Parallelism en el límite de dos de estas regiones se llama Segment Repartition. Branch Repartition y Segment Repartition son operadores lógicos.

Icono del operador Sequence

Sequence

El operador Sequence controla los planes de actualización grandes. Funcionalmente, ejecuta cada entrada en secuencia (de principio a fin). Normalmente, cada entrada es una actualización de un objeto diferente. Solo devuelve las filas que proceden de su última entrada (inferior). Sequence es un operador lógico y físico.

Icono del operador Sequence project

Sequence Project

El operador Sequence Project agrega columnas para realizar cálculos sobre un conjunto ordenado. Divide el conjunto de entrada en segmentos basados en el valor de una o varias columnas. A continuación, muestra un segmento cada vez. En el operador Sequence Project, las columnas se muestran como argumentos. Sequence Project es un operador lógico y físico.

Icono del operador de cursor Snapshot

Snapshot

El operador Snapshot crea un cursor que no detecta las modificaciones realizadas por otros.

Icono del operador Sort

Sort

El operador Sort ordena todas las filas entrantes. La columna Argument contiene un predicado DISTINCT ORDER BY:() si esta operación elimina las réplicas, o un predicado ORDER BY:() con una lista de las columnas, separadas por comas, que se van a ordenar. Las columnas llevan como prefijo el valor ASC, si el orden de las columnas es ascendente, o el valor DESC, si es descendente. Sort es un operador físico y lógico.

Icono del operador Split

Split

El operador Split se utiliza para optimizar el procesamiento de actualizaciones. Divide cada operación de actualización en una operación de eliminación y una operación de inserción. Split es un operador lógico y físico.

Icono del operador Spool

Spool

El operador Spool guarda un resultado de consulta intermedio en la base de datos tempdb.

Icono del operador Stream Aggregate

Stream Aggregate

El operador Stream Aggregate agrupa las filas por una o varias columnas y, a continuación, calcula una o varias expresiones agregadas devueltas por la consulta. El resultado de este operador puedes ser utilizado por operadores posteriores de la consulta, devuelto al cliente, o ambas cosas. El operador Stream Aggregate requiere una entrada ordenada por las columnas dentro de sus grupos. El optimizador usará un operador Sort antes de este operador si un operador Sort anterior no ha ordenado ya los datos o debido a una búsqueda o recorrido de índice ordenado. En la instrucción SHOWPLAN_ALL o en el plan de ejecución gráfico de SQL Server Management Studio, las columnas del predicado GROUP BY se enumeran en la columna Argument y las expresiones agregadas se enumeran en la columna Defined Values. Stream Aggregate es un operador físico.

Icono del operador Switch

Switch

Switch es un tipo especial de iterador de concatenación que tiene n entradas. A cada operador Switch se asocia una expresión. Dependiendo del valor devuelto de la expresión (entre 0 y n-1), Switch copia el flujo de entrada correspondiente en el flujo de salida. Un uso de Switch consiste en implementar planes de consulta en los que participan cursores de avance rápido con determinados operadores, como el operador TOP. Switch es un operador lógico y físico.

Icono del operador Table Delete

Table Delete

El operador físico Table Delete elimina filas de la tabla especificada en la columna Argument del plan de ejecución de consulta.

Icono del operador Table Insert

Table Insert

El operador Table Insert inserta filas de su entrada en la tabla especificada en la columna Argument del plan de ejecución de consulta. La columna Argument también contiene un predicado SET:(), que indica el valor con el que se establece cada columna. Si Table Insert no tiene elementos secundarios para los valores de inserción, se obtendrá la fila insertada del propio operador Insert. Table Insert es un operador físico.

Operador Table merge

Table Merge

El operador Table Merge aplica un flujo de datos de mezcla a un montón. El operador elimina, actualiza o inserta filas en la tabla especificada en la columna Argument del operador. La operación real que se ejecuta depende del valor de tiempo de ejecución de la columna ACTION especificada en la columna Argument del operador. Table Merge es un operador físico.

Icono del operador Table Scan

Table Scan

El operador Table Scan recupera todas las filas de la tabla especificada en la columna Argument del plan de ejecución de consulta. Si hay un predicado WHERE:() en la columna Argument, solo se devuelven las filas que cumplan el predicado. Table Scan es un operador lógico y físico.

Icono del operador Table Spool

Table Spool

El operador Table Spool recorre la entrada y coloca una copia de cada fila en una tabla de cola oculta almacenada en la base de datos tempdb y que solo existe durante la duración de la consulta. Si se hace retroceder el operador (por ejemplo, mediante un operador Nested Loops) pero no es necesario volver a enlazar, se usan los datos de la cola en lugar de volver a recorrer la entrada. Table Spool es un operador físico.

Icono del operador Table Update

Table Update

El operador físico Table Update actualiza las filas de entrada de la tabla especificada en la columna Argument del plan de ejecución de consulta. El predicado SET:() determina el valor de cada columna actualizada. Se puede hacer referencia a estos valores en la cláusula SET o en cualquier parte del operador, y en cualquier parte de esta consulta.

Icono del operador Table-valued function

Table-valued Function

El operador Table-valued Function evalúa una función con valores de tabla (Transact-SQL o CLR) y almacena las filas resultantes en la base de datos tempdb. Cuando los iteradores principales solicitan las filas, la función con valores de tabla devuelve las filas desde tempdb.

Las consultas con llamadas a funciones con valores de tablas generan planes de consultas con el iterador de la función con valores de tabla. La función con valores de tabla se puede evaluar con valores de parámetro diferentes:

  • El lector XML de la función con valores de tabla escribe un BLOB XML como parámetro y genera un conjunto de filas que representan los nodos XML en el orden del documento XML. Otros parámetros de entrada pueden restringir los nodos XML devueltos a un subconjunto del documento XML.

  • El lector XML de la función con valores de tabla con filtro XPath es un tipo especial de lector XML de la función con valores de tabla que restringe la salida a los nodos XML que satisfacen una expresión XPath.

Table-valued Function es un operador lógico y físico.

Icono del operador Top

Top

El operador Top recorre la entrada y solo devuelve el primer número o porcentaje especificado de filas, basándose en un criterio de ordenación si es posible. Opcionalmente, la columna Argument puede contener una lista de las columnas en las que se comprueban los valores equivalentes. En los planes de actualización, se usa el operador Top para aplicar límites de recuento de filas. Top es un operador lógico y físico. Top es un operador lógico y físico.

Ninguno

Top N Sort

Top N Sort es parecido al iterador Sort, excepto en que solo se necesitan las primeras N filas, no todo el conjunto de resultados. Para valores pequeños de N, el motor de ejecución de consultas de SQL Server intenta realizar toda la operación de ordenación en memoria. Para valores grandes de N, el motor de ejecución de consultas recurre al método más genérico de ordenación, en el que N no es un parámetro.

Icono del operador Extended (UDX)

UDX

Los operadores extendidos (UDX) implementan una de las múltiples operaciones XQuery y XPath de SQL Server. Todos los operadores UDX son operadores lógicos y físicos.

El operador extendido (UDX) FOR XML se utiliza para serializar el conjunto de filas relacional que introduce en la representación XML en una única columna BLOB de una única fila de salida. Es un operador de agregado XML que depende del orden.

El operador extendido (UDX) XML SERIALIZER es un operador de agregado XML que depende del orden. Especifica filas que representan nodos XML o valores escalares de XQuery en el orden del documento XML y produce un objeto BLOB XML serializado en una única columna XML de una única fila de salida.

El operador extendido (UDX) XML FRAGMENT SERIALIZER es un tipo especial de XML SERIALIZER que se utiliza para procesar filas de entrada que representan fragmentos XML que se insertan en la extensión de modificación de datos de inserción XQuery.

El operador extendido (UDX) XQUERY STRING evalúa el valor de cadena XQuery de las filas de entrada que representan nodos XML. Es un operador de agregado de cadena que depende del orden. Produce una fila con columnas que representa el valor escalar de XQuery que contiene el valor de cadena de la entrada.

El operador extendido (UDX) XQUERY LIST DECOMPOSER es un operador de descomposición de lista XQuery. Para cada fila de entrada que representa un nodo XML, produce una o varias filas, cada una de las cuales representa un valor escalar de XQuery que contiene un valor de elemento de lista si la entrada es de tipo lista XSD.

El operador extendido (UDX) XQUERY DATA evalúa la función XQuery fn:data() en la entrada que representa nodos XML. Es un operador de agregado de cadena que depende del orden. Produce una fila con columnas que representa el valor escalar de XQuery que contiene el resultado de fn:data().

El operador extendido XQUERY CONTAINS evalúa la función XQuery fn:contains() en la entrada que representa nodos XML. Es un operador de agregado de cadena que depende del orden. Produce una fila con columnas que representa el valor escalar de XQuery que contiene el resultado de fn:contains().

El operador extendido UPDATE XML NODE actualiza el nodo XML en la extensión de modificación de datos de reemplazo XQuery del método modify() en el tipo XML.

Ninguno

Union

El operador Union recorre varias entradas, obtiene cada fila recorrida y quita los duplicados. Union es un operador lógico.

Icono del operador Update (motor de base de datos)

Update

El operador lógico Update actualiza cada fila a partir de su entrada en el objeto especificado en la columna Argument del plan de ejecución de consulta. Update es un operador lógico. El operador físico es Table Update, Index Update o Clustered Index Update.

Icono del elemento del lenguaje While

While

El operador While implementa el bucle while de Transact-SQL. While es un elemento del lenguaje

Icono del operador Table Spool

Window Spool

El operador Window Spool expande cada fila del conjunto de filas que representa la ventana asociada con él. En una consulta, la cláusula OVER define la ventana de un conjunto de resultados de la consulta y, a continuación, una función de ventana calcula un valor para cada fila de la ventana. Window Spool es un operador lógico y físico.