Partilhar via


Referência de operadores lógicos e físicos do Showplan

Os operadores descrevem como o SQL Server executa uma consulta ou uma instrução DML (Linguagem de Manipulação de Dados). O otimizador de consulta usa operadores para criar um plano de consulta para criar o resultado especificado na consulta ou para executar a operação especificada na instrução DML. O plano de consulta é uma árvore composta por operadores físicos. Você pode exibir o plano de consulta usando as instruções SET SHOWPLAN, as opções de plano de execução gráfica no SQL Server Management Studio ou as classes de evento showplan do SQL Server Profiler.

Os operadores são classificados como operadores lógicos e físicos.

Operadores lógicos:
Operadores lógicos descrevem a operação algébrica relacional usada para processar uma expressão. Em outras palavras, os operadores lógicos descrevem conceitualmente qual operação precisa ser executada.

Operadores físicos
Os operadores físicos implementam a operação descrita por operadores lógicos. Cada operador físico é um objeto ou uma rotina que executa uma operação. Por exemplo, alguns operadores físicos acessam colunas ou linhas de uma tabela, índice ou exibição. Outros operadores físicos executam outras operações, como cálculos, agregações, verificações de integridade de dados ou junções. Os operadores físicos têm custos associados a eles.

Os operadores físicos inicializam, coletam dados e fecham. Especificamente, o operador físico pode atender às três chamadas de método a seguir:

  • Init(): o método Init() faz com que um operador físico se inicialize e configure as estruturas de dados necessárias. O operador físico pode receber muitas chamadas init(), embora normalmente um operador físico receba apenas uma.

  • GetNext(): o método GetNext() faz com que um operador físico obtenha a primeira ou posterior linha de dados. O operador físico pode receber zero ou muitas chamadas GetNext( ).

  • Close(): o método Close() faz com que um operador físico execute algumas operações de limpeza e desligue-se. Um operador físico recebe apenas uma chamada Close( ).

O método GetNext() retorna uma linha de dados, e o número de vezes que é chamado aparece como ActualRows na saída do Showplan gerada ao usar SET STATISTICS PROFILE ON ou SET STATISTICS XML ON. Para obter mais informações sobre essas opções SET, consulte SET STATISTICS PROFILE (Transact-SQL) e SET STATISTICS XML (Transact-SQL).

As contagens de ActualRebinds e ActualRewinds que aparecem na saída do Showplan referem-se ao número de vezes que o método Init() é chamado. A menos que um operador esteja no lado interno de uma junção de loop, ActualRebinds é igual a um e ActualRewinds é igual a zero. Se um operador estiver no lado interno de um loop join, a soma do número de rebinds e retrocessos deverá ser igual ao número de linhas processadas no lado externo do join. Uma revinculação significa que um ou mais dos parâmetros correlacionados da junção foram alterados e o lado interno deve ser reavaliado. Um retrocesso significa que nenhum dos parâmetros correlacionados foi alterado e o conjunto de resultados internos anterior pode ser reutilizado.

ActualRebinds e ActualRewinds estão presentes na saída do Showplan XML gerada por SET STATISTICS XML ON. Elas são preenchidas apenas para os operadores Nonclustered Index Spool, Remote QueryRow Count Spool, SortTable Spool e Table-valued Function. ActualRebinds e ActualRewinds também podem ser preenchidos para os Assert operadores e Filtrar quando o atributo StartupExpression é definido como TRUE.

Quando ActualRebinds e ActualRewinds estão presentes em um Plano de Execução XML, eles são comparáveis a EstimateRebinds e EstimateRewinds. Quando eles estão ausentes, o número estimado de linhas (EstimateRows) é comparável ao número real de linhas (ActualRows). Observe que a saída real do Showplan gráfico exibe zeros para os rebinds e rewinds quando eles estão ausentes.

Um contador relacionado, ActualEndOfScans, está disponível somente quando a saída do Showplan é produzida usando SET STATISTICS XML ON. Sempre que um operador físico atinge o final de seu fluxo de dados, esse contador é incrementado por um. Um operador físico pode chegar ao final de seu fluxo de dados zero, um ou várias vezes. Assim como ocorre com rebinds e rebobinamentos, o número de término de verificações pode ser mais de um somente se o operador estiver no lado interno de uma junção de loop. O número de verificações finais deve ser menor ou igual à soma do número de reencadernações e retrocessos.

Mapeando operadores físicos e lógicos

O otimizador de consulta cria um plano de consulta como uma árvore que consiste em operadores lógicos. Depois que o otimizador de consulta cria o plano, o otimizador de consulta escolhe o operador físico mais eficiente para cada operador lógico. O otimizador de consulta usa uma abordagem baseada em custo para determinar qual operador físico implementará um operador lógico.

Normalmente, uma operação lógica pode ser implementada por vários operadores físicos. No entanto, em casos raros, um operador físico também pode implementar várias operações lógicas.

Descrições do operador

Esta seção contém descrições dos operadores lógicos e físicos.

Ícone do plano de execução gráfica Operador de plano de execução Descrição
Nenhum Aggregate O Aggregate operador calcula uma expressão que contém MIN, MAX, SUM, COUNT ou AVG. O Aggregate operador pode ser um operador lógico ou um operador físico.
Ícone do operador de expressão aritmética Arithmetic Expression O Arithmetic Expression operador calcula um novo valor de valores existentes em uma linha. Arithmetic Expression não é usado no SQL Server 2014.
Ícone do operador Assert Assert O Assert operador verifica uma condição. Por exemplo, ele valida a integridade referencial ou garante que uma subconsulta escalar retorne uma linha. Para cada linha de entrada, o Assert operador avalia a expressão na Argument coluna do plano de execução. Se essa expressão for avaliada como NULL, a linha será passada pelo Assert operador e a execução da consulta continuará. Se essa expressão for avaliada como um valor não nulo, o erro apropriado será gerado. O Assert operador é um operador físico.
Atribuir ícone de elemento de linguagem Assign O Assign operador atribui o valor de uma expressão ou uma constante a uma variável. Assign é um elemento de linguagem.
Nenhum Asnyc Concat O Asnyc Concat operador é usado apenas em consultas remotas (consultas distribuídas). Tem n filhos e um nó pai. Normalmente, algumas das crianças são computadores remotos que participam de uma consulta distribuída. Asnyc Concat open() emite chamadas a todos os filhos simultaneamente e, em seguida, aplica um bitmap a cada filho. Para cada bit que é um 1, Async Concat envia sob demanda as linhas de saída para o nó pai.
Ícone do operador Bitmap Bitmap O SQL Server usa o Bitmap operador para implementar a filtragem de bitmap em planos de consulta paralelos. A filtragem de bitmap acelera a execução da consulta eliminando linhas com valores de chave que não podem produzir nenhum registro de junção antes de passar linhas por outro operador, como o Parallelism operador. Um filtro bitmap usa uma representação compacta de um conjunto de valores de uma tabela em uma parte da árvore do operador para filtrar linhas de uma segunda tabela em outra parte da árvore. Ao remover linhas desnecessárias no início da consulta, os operadores subsequentes têm menos linhas com as quais trabalhar e o desempenho geral da consulta melhora. O otimizador determina quando um bitmap é seletivo o suficiente para ser útil e em quais operadores aplicar o filtro. Bitmap é um operador físico.
Ícone do operador Bitmap Bitmap Create O Bitmap Create operador aparece na saída do Showplan, onde os bitmaps são construídos. Bitmap Create é um operador lógico.
Ícone do operador de pesquisa de favoritos Bookmark Lookup O operador Bookmark Lookup usa um marcador (ID da linha ou chave de clustering) para localizar a linha correspondente na tabela ou índice clusterizado. A Argument coluna contém o rótulo de marcador usado para localizar a linha na tabela ou no índice agrupado. A Argument coluna também contém o nome da tabela ou índice clusterizado no qual a linha é pesquisada. Se a cláusula WITH PREFETCH aparecer na coluna Argument, o processador de consulta determinou que é a melhor opção usar a pré-busca assíncrona (leitura antecipada) ao procurar marcadores na tabela ou índice clusterizado.

Bookmark Lookup não é usado no SQL Server 2014. Em vez disso, Clustered Index Seek e RID Lookup fornecem funcionalidade de pesquisa de marcador. O Key Lookup operador também fornece essa funcionalidade.
Nenhum Branch Repartition Em um plano de consulta paralelo, às vezes há regiões conceituais de iteradores. Todos os iteradores dentro dessa região podem ser executados por threads paralelos. As regiões em si devem ser executadas em série. Alguns dos Parallelism iteradores dentro de uma região individual são chamados Branch Repartition. O Parallelism iterador no limite de duas dessas regiões é chamado Segment Repartition. Branch Repartition e Segment Repartition são operadores lógicos.
Nenhum Broadcast Broadcast tem um nó filho e n nós pais. Broadcast envia suas linhas de entrada para múltiplos consumidores conforme a demanda. Cada consumidor obtém todas as linhas. Por exemplo, se todos os consumidores forem partes construtoras de uma junção de hash, então serão criadas n cópias das tabelas de hash.
Ícone do operador de hash de compilação Build Hash Indicar a construção de uma tabela de hash em lote para um índice columnstore otimizado para memória xVelocity.
Nenhum Cache Cache é uma versão especializada do operador Spool . Ele armazena apenas uma linha de dados. Cache é um operador lógico. Cache não é usado no SQL Server 2014.
Ícone do operador de exclusão de índice clusterizado Clustered Index Delete O Clustered Index Delete operador exclui linhas do índice clusterizado especificado na coluna Argument do plano de execução da consulta. Se um predicado WHERE:() estiver presente na coluna Argumento, somente as linhas que atendem ao predicado serão excluídas. Clustered Index Delete é um operador físico.
Ícone do operador de inserção de índice clusterizado Clustered Index Insert O operador Showplan Clustered Index Insert insere linhas de sua entrada no índice agrupado especificado na coluna Argument. A coluna Argument também contém um predicado SET:(), que indica o valor para o qual cada coluna está definida. Se Clustered Index Insert não tiver filhos para inserir valores, a linha inserida será retirada diretamente do operador Insert. Clustered Index Insert é um operador físico.
Operador de mesclagem de índice clusterizado Mesclagem de índice agrupado O operador Clustered Index Merge aplica um fluxo de dados de mesclagem a um índice clusterizado. O operador exclui, atualiza ou insere linhas do índice clusterizado especificado na Argument coluna do operador. A operação real executada depende do valor de runtime da coluna ACTION especificada na Argument coluna do operador. A Mesclagem de Índice Clusterizado é um operador físico.
Ícone do operador de verificação de índice clusterizado Clustered Index Scan O Clustered Index Scan operador verifica o índice clusterizado especificado na coluna Argument do plano de execução da consulta. Quando um predicado WHERE:() opcional está presente, somente as linhas que atendem ao predicado são retornadas. Se a coluna Argument contiver a cláusula ORDERED, o processador de consulta solicitará que a saída das linhas seja retornada na ordem em que o índice clusterizado a classificou. Se a cláusula ORDERED não estiver presente, o mecanismo de armazenamento examinará o índice da maneira ideal, sem necessariamente classificar a saída. Clustered Index Scan é um operador lógico e físico.
Ícone do operador de busca de índice clusterizado Clustered Index Seek O Clustered Index Seek operador usa a capacidade de busca de índices para recuperar linhas de um índice clusterizado. A Argument coluna contém o nome do índice clusterizado que está sendo usado e o predicado SEEK:(). O mecanismo de armazenamento usa o índice para processar apenas as linhas que atendem a esse predicado SEEK:(). Ele também pode incluir um predicado WHERE:() em que o mecanismo de armazenamento é avaliado em relação a todas as linhas que atendem ao predicado SEEK:(), mas isso é opcional e não usa índices para concluir esse processo.

Se a Argument coluna contiver a cláusula ORDERED, o processador de consulta determinou que as linhas devem ser retornadas na ordem em que o índice clusterizado as classificou. Se a cláusula ORDERED não estiver presente, o mecanismo de armazenamento pesquisará o índice da maneira ideal, sem necessariamente classificar a saída. Permitir que a saída mantenha sua ordenação pode ser menos eficiente do que produzir saída não variada. Quando a palavra-chave LOOKUP aparece, uma pesquisa de marcador está sendo executada. No SQL Server 2008 e em versões posteriores, o operador Key Lookup fornece a funcionalidade de pesquisa de indicador. Clustered Index Seek é um operador lógico e físico.
Ícone do operador de atualização de índice clusterizado Clustered Index Update O Clustered Index Update operador atualiza as linhas de entrada no índice clusterizado especificado na Argument coluna. Se um predicado WHERE:() estiver presente, somente as linhas que atendem a esse predicado serão atualizadas. Se um predicado SET:() estiver presente, cada coluna atualizada será definida como esse valor. Se um predicado DEFINE:() estiver presente, os valores definidos por esse operador serão listados. Esses valores podem ser referenciados na cláusula SET ou em outro lugar dentro desse operador e em outros lugares nessa consulta. Clustered Index Update é um operador lógico e físico.
Ícone do operador Recolher Collapse O Collapse operador otimiza o processamento de atualização. Quando uma atualização é executada, ela pode ser dividida (usando o Split operador) em uma exclusão e uma inserção. A Argument coluna contém uma cláusula GROUP BY:() que especifica uma lista de colunas de chave. Se o processador de consulta encontrar linhas adjacentes que excluem e inserem os mesmos valores de chave, ele substituirá essas operações separadas por uma única operação de atualização mais eficiente. Collapse é um operador lógico e físico.
Verificação de Índice Columnstore Columnstore Index Scan O Columnstore Index Scan operador verifica o índice columnstore especificado na Argument coluna do plano de execução da consulta.
Ícone do operador escalar de cálculo Compute Scalar O Compute Scalar operador avalia uma expressão para produzir um valor escalar computado. Em seguida, isso pode ser retornado ao usuário, referenciado em outro lugar na consulta ou ambos. Um exemplo de ambos está em um predicado de filtro ou predicado de junção. Compute Scalar é um operador lógico e físico.

Compute Scalar operadores que aparecem em Planos de Execução gerados por SET STATISTICS XML podem não conter o elemento RunTimeInformation. Em Planos Gráficos, Linhas Reais, Rebinds Reais e Rewinds Reais podem estar ausentes da janela Propriedades quando a opção Incluir Plano de Execução Real é selecionada no SQL Server Management Studio. Quando isso ocorre, significa que, embora esses operadores tenham sido usados no plano de consulta compilado, seu trabalho foi executado por outros operadores no plano de consulta em tempo de execução. Observe também que o número de execuções na saída do Showplan gerada por SET STATISTICS PROFILE é equivalente à soma de rebinds e retrocessos em Showplans gerados por SET STATISTICS XML.
Ícone do operador de concatenação Concatenação O operador Concatenação verifica várias entradas, retornando cada linha digitalizada. A concatenação normalmente é usada para implementar o constructo UNION ALL Transact-SQL. O operador físico concatenação tem duas ou mais entradas e uma saída. A concatenação copia linhas do primeiro fluxo de entrada para o fluxo de saída e, em seguida, repete essa operação para cada fluxo de entrada adicional. Concatenação é um operador lógico e físico.
Ícone do operador de verificação constante Constant Scan O Constant Scan operador apresenta uma ou mais linhas constantes em uma consulta. Um Compute Scalar operador geralmente é usado após um Constant Scan para adicionar colunas a uma linha produzida pelo Constant Scan operador.
Ícone do elemento de linguagem Converter (Mecanismo de Banco de Dados) Convert O Convert operador converte um tipo de dados escalar em outro. Convert é um elemento de linguagem.
Nenhum Cross Join O Cross Join operador une cada linha da primeira entrada (superior) com cada linha da segunda entrada (inferior). Cross Join é um operador lógico.
Ícone do operador de cursor catchall catchall O ícone catchall é exibido quando a lógica que produz planos de execução gráficos não consegue encontrar um ícone adequado para o iterador. O ícone catchall não indica necessariamente uma condição de erro. Há três ícones catchall: azul (para iteradores), laranja (para cursores) e verde (para elementos de linguagem Transact-SQL).
Nenhum do Cursor Os operadores lógicos e físicos do Cursor são usados para descrever como uma consulta ou atualização envolvendo operações de cursor é executada. Os operadores físicos descrevem o algoritmo de implementação física usado para processar o cursor; por exemplo, usando um cursor controlado por conjunto de chaves. Cada etapa na execução de um cursor envolve um operador físico. Os operadores lógicos descrevem uma propriedade do cursor, como por exemplo, o cursor ser de leitura somente.

Os operadores lógicos incluem Assíncrono, Otimista, Primário, Somente Leitura, Bloqueios de Rolagem, Secundário e Síncrono.

Os operadores físicos incluem Dynamic, Fetch Query, Keyset, Population Query, Refresh Query e Snapshot.
Ícone de elemento de linguagem declarar Declare O Declare operador aloca uma variável local no plano de consulta. Declare é um elemento de linguagem.
Ícone do operador Excluir (Mecanismo de Banco de Dados) Delete O operador Delete exclui de um objeto as linhas que atendem ao predicado opcional na coluna Argument.
Excluir ícone do operador de verificação Deleted Scan O Deleted Scan operador analisa a tabela excluída dentro de um gatilho.
Nenhum Distinct O Distinct operador remove duplicatas de um conjunto de linhas ou de uma coleção de valores. Distinct é um operador lógico.
Nenhum Distinct Sort O Distinct Sort operador lógico verifica a entrada, removendo duplicatas e classificando pelas colunas especificadas no predicado DISTINCT ORDER BY:() da Argument coluna. Distinct Sort é um operador lógico.
Ícone do operador de paralelismo de distribuição de fluxos Distribuir Fluxos O operador Distribuir Fluxos é usado somente em planos de consulta paralelos. O operador Distribuir Fluxos usa um único fluxo de entrada de registros e produz vários fluxos de saída. O conteúdo e o formato do registro não são alterados. Cada registro do fluxo de entrada aparece em um dos fluxos de saída. Esse operador preserva automaticamente a ordem relativa dos registros de entrada nos fluxos de saída. Normalmente, o hash é usado para decidir a qual fluxo de saída um registro de entrada específico pertence.

Se a saída for particionada, a Argument coluna conterá um predicado PARTITION COLUMNS:() e as colunas de particionamento. Distribuir Fluxos é um operador lógico
Ícone do operador de cursor dinâmico Dynamic O Dynamic operador usa um cursor que pode ver todas as alterações feitas por outras pessoas.
Ícone do operador Spool Spool Ansioso O operador Eager Spool usa toda a entrada, armazenando cada linha em um objeto temporário oculto armazenado no tempdb banco de dados. Se o operador for remontado (por exemplo, por um Nested Loops operador), mas nenhuma nova vinculação for necessária, os dados armazenados no spool serão usados em vez de reescanear a entrada. Se a reencadernação for necessária, os dados do spool serão descartados e o objeto de spool será reconstruído ao revisar novamente a entrada (reencadernada). O operador Eager Spool cria seu arquivo de spool de maneira "ansiosa": quando o operador pai do spool solicita a primeira linha, o operador de spool consome todas as linhas de seu operador de entrada e as armazena no spool. O Eager Spool é um operador lógico.
Ícone do operador de cursor de consulta Fetch Query O operador Fetch Query recupera linhas quando uma busca é realizada contra um cursor.
Ícone do operador Filtrar (Mecanismo de Banco de Dados) Filtro O operador Filter verifica a entrada, retornando apenas as linhas que atendem à expressão de filtro (predicado) que aparece na Argument coluna.
Nenhum Flow Distinct O Flow Distinct operador lógico verifica a entrada, removendo duplicatas. Enquanto o Distinct operador consome toda a entrada antes de produzir qualquer saída, o operador FlowDistinct retorna cada linha conforme é obtido da entrada (a menos que essa linha seja uma duplicata, nesse caso, ela é descartada).
Nenhum Full Outer Join O Full Outer Join operador lógico retorna cada linha que satisfaz o predicado de junção da primeira entrada (superior) unida a cada linha da segunda entrada (inferior). Ele também retorna linhas de:

-A primeira entrada que não teve correspondências na segunda entrada.

-A segunda entrada que não teve correspondências na primeira entrada.



A entrada que não contém os valores correspondentes é retornada como um valor nulo. Full Outer Join é um operador lógico.
Ícone do operador de paralelismo de coleta de fluxos Reunir fluxos O operador Gather Streams é usado apenas em planos de consulta paralelos. O operador Gather Streams consome vários fluxos de entrada e produz um único fluxo de saída de registros combinando os fluxos de entrada. O conteúdo e o formato do registro não são alterados. Se esse operador estiver preservando a ordem, todos os fluxos de entrada deverão ser ordenados. Se a saída for ordenada, a Argument coluna conterá um predicado ORDER BY:() e os nomes das colunas que estão sendo ordenadas. O Gather Streams é um operador lógico.
Ícone do operador de correspondência de hash Hash Match O Hash Match operador cria uma tabela de hash calculando um valor de hash para cada linha de sua entrada de build. Um predicado HASH:() com uma lista de colunas usadas para criar um valor de hash aparece na Argument coluna. Em seguida, para cada linha de investigação (conforme aplicável), ela calcula um valor de hash (usando a mesma função de hash) e procura correspondências na tabela de hash. Se um predicado residual estiver presente (identificado por RESIDUAL:() na Argument coluna), esse predicado também deverá ser satisfeito para que as linhas sejam consideradas uma correspondência. O comportamento depende da operação lógica que está sendo executada:

Para qualquer junção, use a primeira entrada (superior) para criar a tabela de hash e a segunda entrada (inferior) para investigar a tabela de hash. Correspondências de saída (ou não-correspondências) conforme determinado pelo tipo de junção. Se várias junções usarem a mesma coluna de junção, essas operações serão agrupadas em uma equipe de hash.

Para os operadores distintos ou agregados, use a entrada para criar a tabela de hash (removendo duplicatas e computando qualquer expressão de agregação). Quando a tabela de hash for criada, percorra a tabela e exiba todas as entradas.

Para o operador de união, use a primeira entrada para criar a tabela de hash (removendo duplicatas). Use a segunda entrada (que não deve ter duplicatas) para investigar a tabela de hash, retornando todas as linhas que não têm correspondências e, em seguida, examine a tabela de hash e retorne todas as entradas.



Hash Match é um operador físico.
Se ícone do elemento de linguagem If O If operador executa o processamento condicional com base em uma expressão. If é um elemento de linguagem.
Nenhum Inner Join O Inner Join operador lógico retorna cada linha que satisfaz a junção da primeira entrada (superior) com a segunda entrada (inferior).
Ícone do operador Insert (Mecanismo de Banco de Dados) Insert O Insert operador lógico insere cada linha de sua entrada no objeto especificado na Argument coluna. O operador físico é o Table Insert, Index Insert ou Clustered Index Insert operador.
Ícone do operador de verificação inserido Escaneamento Inserido O operador Scan Inserido examina a tabela inserida. Scan Inserido é um operador lógico e físico.
Ícone do elemento de linguagem intrínseca Intrinsic O Intrinsic operador invoca uma função de Transact-SQL interna. Intrinsic é um elemento de linguagem.
Ícone do operador Iterador catchall Iterator O Iterator ícone catchall é exibido quando um ícone adequado para o iterador não pode ser encontrado pela lógica que produz planos de exibição gráficos. O ícone catchall não indica necessariamente uma condição de erro. Há três ícones catchall: azul (para iteradores), laranja (para cursores) e verde (para construções de linguagem Transact-SQL).
Ícone do operador de pesquisa de favoritos Key Lookup O Key Lookup operador é uma pesquisa de marcador em uma tabela com um índice clusterizado. A Argument coluna contém o nome do índice clusterizado e a chave de clustering usada para pesquisar a linha no índice clusterizado. Key Lookup é sempre acompanhado por um operador Nested Loops. Se a cláusula WITH PREFETCH aparecer na Argument coluna, o processador de consulta determinou que é ideal usar a pré-busca assíncrona (leitura antecipada) ao procurar indicadores no índice clusterizado.

O uso de um Key Lookup operador em um plano de consulta indica que a consulta pode se beneficiar do ajuste de desempenho. Por exemplo, o desempenho da consulta pode ser melhorado adicionando um índice de cobertura.
Ícone do operador do cursor do conjunto de Keyset O Keyset operador usa um cursor que pode ver atualizações, mas não inserções feitas por outras pessoas.
Ícone catchall do elemento de linguagem Language Element O Language Element ícone catchall é exibido quando um ícone adequado para o iterador não pode ser encontrado pela lógica que produz planos de exibição gráficos. O ícone catchall não indica necessariamente uma condição de erro. Há três ícones catchall: azul (para iteradores), laranja (para cursores) e verde (para construções de linguagem Transact-SQL).
Ícone do operador Spool Spool lento O operador lógico Lazy Spool armazena cada linha de sua entrada em um objeto temporário oculto armazenado no tempdb banco de dados. Se o operador for remontado (por exemplo, por um Nested Loops operador), mas nenhuma nova vinculação for necessária, os dados armazenados no spool serão usados em vez de reescanear a entrada. Se a reencadernação for necessária, os dados do spool serão descartados e o objeto de spool será reconstruído ao revisar novamente a entrada (reencadernada). O operador Lazy Spool cria seu arquivo de spool de maneira "lenta", ou seja, sempre que o operador pai do spool solicita uma linha, o operador de spool obtém uma linha de seu operador de entrada e o armazena no spool, em vez de consumir todas as linhas ao mesmo tempo. Lazy Spool é um operador lógico.
Nenhum Left Anti Semi Join O Left Anti Semi Join operador retorna cada linha da primeira entrada (superior) quando não há nenhuma linha correspondente na segunda entrada (inferior). Se nenhum predicado de junção existir na Argument coluna, cada linha será uma linha correspondente. Left Anti Semi Join é um operador lógico.
Nenhum Left Outer Join O Left Outer Join operador retorna cada linha que satisfaz a junção da primeira entrada (superior) com a segunda entrada (inferior). Ele também retorna todas as linhas da primeira entrada que não tinham linhas correspondentes na segunda entrada. As linhas sem correspondência na segunda entrada são retornadas como valores nulos. Se nenhum predicado de junção existir na Argument coluna, cada linha será uma linha correspondente. Left Outer Join é um operador lógico.
Nenhum Left Semi Join O Left Semi Join operador retorna cada linha da primeira entrada (superior) quando há uma linha correspondente na segunda entrada (inferior). Se nenhum predicado de junção existir na Argument coluna, cada linha será uma linha correspondente. Left Semi Join é um operador lógico.
Ícone do operador de verificação de linha de log Log Row Scan O Log Row Scan operador verifica o log de transações. Log Row Scan é um operador lógico e físico.
Ícone do operador de intervalo de mesclagem ícone Merge Interval O Merge Interval operador mescla vários intervalos (potencialmente sobrepostos) para produzir intervalos mínimos e não sobrepostos que são usados para buscar entradas de índice. Esse operador normalmente aparece acima de um ou mais operadores Compute Scalar sobre Constant Scan operadores, que constroem os intervalos (representados como colunas em linha) que esse operador une. Merge Interval é um operador lógico e físico.
Ícone do operador merge join Junção de Mesclagem O operador Merge Join executa a junção interna, junção externa esquerda, junção semi esquerda, junção anti-junção esquerda, junção externa direita, semi-junção direita, junção anti-junção direita e operações lógicas de união.

Argument Na coluna, o operador Merge Join contém um predicado MERGE:() se a operação estiver executando uma junção um-para-muitos ou um predicado MANY-TO-MANY MERGE:() se a operação estiver executando uma junção muitos para muitos. A Argument coluna também inclui uma lista separada por vírgulas de colunas usadas para executar a operação. O operador Merge Join requer duas entradas classificadas em suas respectivas colunas, possivelmente inserindo operações de classificação explícitas no plano de consulta. A junção de mesclagem é particularmente eficaz se a classificação explícita não for necessária, por exemplo, se existir um índice B-tree adequado no banco de dados ou se a ordem de classificação puder ser explorada para várias operações, como uma junção de mesclagem ou agrupamento com consolidação. Merge Join é um operador físico.
Ícone do operador de loops aninhados Nested Loops O Nested Loops operador executa a junção interna, a junção externa esquerda, a semi-junção esquerda e as operações lógicas anti-junção esquerda. As junções de loops aninhados executam uma pesquisa na tabela interna para cada linha da tabela externa, normalmente usando um índice. O processador de consulta decide, com base nos custos previstos, se deseja classificar a entrada externa para melhorar a localidade das pesquisas no índice sobre a entrada interna. Todas as linhas que atendem ao predicado (opcional) na Argument coluna são retornadas conforme aplicável, com base na operação lógica que está sendo executada. Nested Loops é um operador físico.
Ícone do operador de exclusão de índice não clusterizado Nonclustered Index Delete O Nonclustered Index Delete operador exclui linhas de entrada do índice não clusterizado especificado na Argument coluna. Nonclustered Index Delete é um operador físico.
Ícone do operador de inserção de índice não clusterizado Index Insert O Index Insert operador insere linhas de sua entrada no índice não clusterizado especificado na Argument coluna. A Argument coluna também contém um predicado SET:(), que indica o valor para o qual cada coluna está definida. Index Insert é um operador físico.
Ícone do operador de verificação de índice não clusterizado Index Scan O Index Scan operador recupera todas as linhas do índice não clusterizado especificado na Argument coluna. Se um predicado WHERE:() opcional aparecer na Argument coluna, somente as linhas que atendem ao predicado serão retornadas. Index Scan é um operador lógico e físico.
índice não clusterizadoÍcone do operador de busca de Index Seek O Index Seek operador usa a capacidade de busca de índices para recuperar linhas de um índice não clusterizado. A Argument coluna contém o nome do índice não clusterizado que está sendo usado. Ele também contém o predicado SEEK:(). O mecanismo de armazenamento usa o índice para processar apenas as linhas que atendem ao predicado SEEK:(). Opcionalmente, ele pode incluir um predicado WHERE:(), que o mecanismo de armazenamento avaliará em relação a todas as linhas que atendem ao predicado SEEK:() (ele não usa os índices para fazer isso). Se a Argument coluna contiver a cláusula ORDERED, o processador de consulta determinou que as linhas devem ser retornadas na ordem em que o índice não clusterizado as classificou. Se a cláusula ORDERED não estiver presente, o mecanismo de armazenamento pesquisará o índice da maneira ideal (o que não garante que a saída será classificada). Permitir que a saída mantenha sua ordenação pode ser menos eficiente do que produzir saída não variada. Index Seek é um operador lógico e físico.
Ícone do operador de spool de índice não clusterizado ícone do Index Spool O operador físico Index Spool contém um predicado SEEK:() na coluna Argument. O operador Index Spool examina suas linhas de entrada, colocando uma cópia de cada linha em um arquivo de spool oculto (armazenado no tempdb banco de dados e existente somente durante o tempo de vida da consulta) e cria um índice não clusterizado nas linhas. Isso permite que você use a capacidade de busca de índices para gerar somente as linhas que atendem ao predicado SEEK:(). Se o operador for remontado (por exemplo, por um Nested Loops operador), mas nenhuma nova vinculação for necessária, os dados armazenados no spool serão usados em vez de reescanear a entrada.
Ícone do operador de atualização de índice não clusterizado Ícone do Nonclustered Index Update O Nonclustered Index Update operador físico atualiza as linhas de sua entrada no índice não clusterizado especificado na Argument coluna. Se um predicado SET:() estiver presente, cada coluna atualizada será definida como esse valor. Nonclustered Index Update é um operador físico.
Ícone do operador de inserção de índice online Inserção de índice online O operador físico Inserção de Índice Online indica que uma operação de criação, alteração ou descarte de índice é executada online. Ou seja, os dados da tabela subjacente permanecem disponíveis para os usuários durante a operação de índice.
Nenhum Parallelism O Parallelism operador executa os fluxos de distribuição, coleta fluxos e operações lógicas de repartição de fluxos. As Argument colunas podem conter um predicado PARTITION COLUMNS:() com uma lista separada por vírgulas das colunas que estão sendo particionadas. As Argument colunas também podem conter um predicado ORDER BY:(), listando as colunas para preservar a ordem de classificação durante o particionamento. Parallelism é um operador físico.

Observação: se uma consulta tiver sido compilada como uma consulta paralela, mas em tempo de execução for executada como uma consulta sequencial, a saída do Plano de Execução gerado por SET STATISTICS XML ou usando a opção Incluir Plano de Execução Real no SQL Server Management Studio não conterá o RunTimeInformation elemento para o Parallelism operador. Na saída do SET STATISTICS PROFILE, as contagens de linhas reais e o número de execuções reais exibirão zeros para o operador Parallelism. Quando qualquer uma das condições ocorre, significa que o Parallelism operador só foi usado durante a compilação da consulta e não no plano de consulta em tempo de execução. Observe que, às vezes, os planos de consulta paralelos são executados em série se houver uma carga simultânea alta no servidor.
Ícone do operador de verificação da tabela de parâmetros Parameter Table Scan O Parameter Table Scan operador verifica uma tabela que está agindo como um parâmetro na consulta atual. Normalmente, isso é usado para consultas INSERT em um procedimento armazenado. Parameter Table Scan é um operador lógico e físico.
Nenhum Agregação parcial A Agregação Parcial é usada em planos paralelos. Ele aplica uma função de agregação ao maior número possível de linhas de entrada para que a gravação em disco (conhecida como "derramamento") não seja necessária. Hash Match é o único operador físico (iterador) que implementa a agregação de partição. A Agregação Parcial é um operador lógico.
Ícone do operador cursor de consulta de população Population Query O Population Query operador preenche a tabela de trabalho de um cursor quando o cursor é aberto.
Ícone do operador de atualização do cursor de consulta Refresh Query O operador Refresh Query busca os dados atuais para as linhas no buffer de busca.
Ícone do operador de exclusão remota Remote Delete O Remote Delete operador exclui as linhas de entrada de um objeto remoto. Remote Delete é um operador lógico e físico.
remote index seek showplan operatoroperador de busca de índice remoto no plano de exibição operador de busca de índice remoto no plano de exibição Verificação de índice remoto O operador De verificação de índice remoto verifica o índice remoto especificado na coluna Argument. A Verificação de Índice Remoto é um operador lógico e físico.
operador de plano de exibição de busca de índice remoto Busca de Índice Remoto O operador Remote Index Seek usa a capacidade de busca de um objeto de índice remoto para recuperar linhas. A Argument coluna contém o nome do índice remoto que está sendo usado e o predicado SEEK:(). O Remote Index Seek é um operador físico lógico.
Ícone do operador de inserção remota Inserção Remota O operador de Inserção Remota insere as linhas de entrada em um objeto remoto. A Inserção Remota é um operador lógico e físico.
Ícone do operador de consulta remota Remote Query O Remote Query operador envia uma consulta para uma fonte remota. O texto da consulta enviada ao servidor remoto aparece na Argument coluna. Remote Query é um operador lógico e físico.
Ícone do operador de verificação remota Remote Scan O Remote Scan operador examina um objeto remoto. O nome do objeto remoto aparece na Argument coluna. Remote Scan é um operador lógico e físico.
Ícone do operador de atualização remota Ícone Remote Update O Remote Update operador atualiza as linhas de entrada em um objeto remoto. Remote Update é um operador lógico e físico.
Ícone do operador de paralelismo de redistribuição de fluxos Repartition Streams O operador Repartition Streams consome vários fluxos e produz vários fluxos de registros. O conteúdo e o formato do registro não são alterados. Se o otimizador de consulta usar um filtro bitmap, o número de linhas no fluxo de saída será reduzido. Cada registro de um fluxo de entrada é colocado em um fluxo de saída. Se esse operador estiver preservando a ordem, todos os fluxos de entrada deverão ser ordenados e mesclados em vários fluxos de saída ordenados. Se a saída for particionada, a Argument coluna conterá um predicado PARTITION COLUMNS:() e as colunas de particionamento. Se a saída for ordenada, a Argument coluna conterá um predicado ORDER BY:() e as colunas que estão sendo ordenadas. O Repartition Streams é um operador lógico. O operador é usado somente em planos de consulta paralelos.
Ícone do elemento de linguagem de resultado Result O Result operador é aquele que retorna os dados no final de um plano de consulta. Geralmente, este é o elemento raiz de um Showplan. Result é um elemento de linguagem.
Ícone do operador de pesquisa RID RID Lookup RID Lookup é uma pesquisa de marcador em um heap usando um RID fornecido. A Argument coluna contém o rótulo do marcador usado para localizar a linha na tabela e o nome da tabela em que a linha é localizada. RID Lookup é sempre acompanhado por um LOOP JOIN ANINHADO. RID Lookup é um operador físico. Para obter mais informações sobre pesquisas de marcadores, consulte "Pesquisa de Marcadores" no blog do SQL Server no MSDN.
Nenhum Right Anti Semi Join O Right Anti Semi Join operador gera cada linha da segunda entrada (inferior) quando uma linha correspondente na primeira entrada (superior) não existe. Uma linha correspondente é definida como uma linha que satisfaz o predicado na Argument coluna (se nenhum predicado existir, cada linha é uma linha correspondente). Right Anti Semi Join é um operador lógico.
Nenhum Right Outer Join O Right Outer Join operador retorna cada linha que satisfaz a junção da segunda entrada (inferior) com cada linha correspondente da primeira entrada (superior). Ele também retorna todas as linhas da segunda entrada que não tinham linhas correspondentes na primeira entrada, unidas com NULL. Se nenhum predicado de junção existir na Argument coluna, cada linha será uma linha correspondente. Right Outer Join é um operador lógico.
Nenhum Right Semi Join O Right Semi Join operador retorna cada linha da segunda entrada (inferior) quando há uma linha correspondente na primeira entrada (superior). Se nenhum predicado de junção existir na Argument coluna, cada linha será uma linha correspondente. Right Semi Join é um operador lógico.
Ícone do operador de spool de contagem de linhas Spool de Contagem de Linhas O operador Spool de Contagem de Linhas verifica a entrada, contando quantas linhas estão presentes e retornando o mesmo número de linhas sem nenhum dado nelas. Esse operador é usado quando é importante verificar a existência de linhas, em vez dos dados contidos nas linhas. Por exemplo, se um Nested Loops operador executar uma operação de semi-junção à esquerda e o predicado de junção se aplicar à entrada interna, um spool de contagem de linhas poderá ser colocado na parte superior da entrada interna do operador Nested Loops. Em seguida, o Nested Loops operador pode determinar quantas linhas são produzidas pelo spool de contagem de linhas (porque os dados efetivos do lado interno não são necessários) a fim de decidir se a linha externa será retornada. O Spool de Contagem de Linhas é um operador físico.
Ícone do operador de segmento Segmento Segment é um operador físico e lógico. Ele divide o conjunto de entrada em segmentos com base no valor de uma ou mais colunas. Essas colunas são mostradas como argumentos no operador Segment . Em seguida, o operador gera um segmento de cada vez.
Nenhum Segment Repartition Em um plano de consulta paralelo, às vezes há regiões conceituais de iteradores. Todos os iteradores dentro dessa região podem ser executados por threads paralelos. As regiões em si devem ser executadas em série. Alguns dos Parallelism iteradores dentro de uma região individual são chamados Branch Repartition. O Parallelism iterador no limite de duas dessas regiões é chamado Segment Repartition. Branch Repartition e Segment Repartition são operadores lógicos.
Ícone do operador de sequência Sequence O Sequence operador conduz planos amplos de atualização. Funcionalmente, ele executa cada entrada na sequência (de cima para baixo). Cada entrada geralmente é uma atualização de um objeto diferente. Ele retorna apenas as linhas provenientes de sua última entrada (inferior). Sequence é um operador lógico e físico.
Ícone do operador de projeto de sequência Sequence Project O Sequence Project operador adiciona colunas para executar cálculos em um conjunto ordenado. Ele divide o conjunto de entrada em segmentos com base no valor de uma ou mais colunas. Em seguida, o operador gera um segmento de cada vez. Essas colunas são mostradas como argumentos no Sequence Project operador. Sequence Project é um operador lógico e físico.
Ícone do operador de cursor de instantâneo Instantâneo O operador Instantâneo cria um cursor que não vê alterações feitas por outras pessoas.
Ícone do operador de classificação Sort O Sort operador classifica todas as linhas de entrada. A coluna Argument contém um predicado DISTINCT ORDER BY:() nos casos em que duplicatas são removidas por esta operação, ou um predicado ORDER BY:() com uma lista de colunas a serem classificadas, separadas por vírgulas. As colunas serão prefixadas com o valor ASC se as colunas forem classificadas em ordem crescente ou o valor DESC se as colunas forem classificadas em ordem decrescente. Sort é um operador lógico e físico.
Ícone de Separação do Operador Split O Split operador é usado para otimizar o processamento de atualização. Ele divide cada operação de atualização em uma operação de exclusão e de inserção. Split é um operador lógico e físico.
Ícone do operador Spool Desenrolador O operador Spool salva um resultado de consulta intermediária no tempdb banco de dados.
Ícone do operador de agregação de fluxo Stream Aggregate O Stream Aggregate operador agrupa linhas por uma ou mais colunas e calcula uma ou mais expressões de agregação retornadas pela consulta. A saída desse operador pode ser referenciada por operadores posteriores na consulta, retornada ao cliente ou em ambos os casos. O Stream Aggregate operador requer a entrada ordenada pelas colunas dentro de seus grupos. O otimizador usará um Sort operador antes desse operador se os dados ainda não estiverem classificados devido a um operador anterior Sort ou devido a uma busca ou verificação de índice ordenado. Na instrução SHOWPLAN_ALL ou no plano de execução gráfica no SQL Server Management Studio, as colunas no predicado GROUP BY são listadas na Argument coluna e as expressões de agregação são listadas na coluna Valores Definidos . Stream Aggregate é um operador físico.
Ícone de operador de comutador Interruptor Switch é um tipo especial de iterador de concatenação que tem n entradas. Uma expressão é associada a cada operador switch . Dependendo do valor retornado da expressão (entre 0 e n-1), o Switch copia o fluxo de entrada apropriado para o fluxo de saída. Um uso do Switch é implementar planos de consulta envolvendo cursores de avanço rápido com determinados operadores, como o operador TOP . Switch é um operador lógico e físico.
Ícone do operador de exclusão de tabela Table Delete O Table Delete operador físico exclui linhas da tabela especificada na Argument coluna do plano de execução da consulta.
Ícone do operador de inserção de tabela Table Insert O operador Table Insert insere linhas de sua entrada na tabela especificada no plano de execução da consulta na coluna Argument. A Argument coluna também contém um predicado SET:(), que indica o valor para o qual cada coluna está definida. Se Table Insert não tiver filhos para inserir valores, a linha inserida será retirada do próprio operador Insert. Table Insert é um operador físico.
Operador de mesclagem de tabela Mesclagem de Tabela O operador Table Merge aplica um fluxo de dados mesclado a um heap. O operador exclui, atualiza ou insere linhas na tabela especificada na Argument coluna do operador. A operação real executada depende do valor de tempo de execução da coluna ACTION especificada na Argument coluna do operador. Mesclagem de Tabela é um operador físico.
Ícone do operador de verificação de tabela Table Scan O Table Scan operador recupera todas as linhas da tabela especificada na Argument coluna do plano de execução da consulta. Se um predicado WHERE:() aparecer na Argument coluna, somente as linhas que atendem ao predicado serão retornadas. Table Scan é um operador lógico e físico.
Ícone do operador de spool de tabela Spool de Tabela O operador Spool de Tabela examina a entrada e coloca uma cópia de cada linha em uma tabela de spool oculta que é armazenada no banco de dados tempdb e existente apenas durante o tempo de vida da consulta. Se o operador for remontado (por exemplo, por um Nested Loops operador), mas nenhuma nova vinculação for necessária, os dados armazenados no spool serão usados em vez de reescanear a entrada. O Table Spool é um operador físico.
Ícone do operador de atualização de tabela Table Update O Table Update operador físico atualiza as linhas de entrada na tabela especificada na Argument coluna do plano de execução da consulta. O predicado SET:() determina o valor de cada coluna atualizada. Esses valores podem ser referenciados na cláusula SET ou em outro lugar dentro desse operador, bem como em outro lugar nessa consulta.
Ícone do operador de função com valor de tabela Ícone Função com valor de tabela O operador função com valor de tabela avalia uma função com valor de tabela (Transact-SQL ou CLR) e armazena as linhas resultantes no banco de dados tempdb . Quando os iteradores pai solicitam as linhas, a Função com valor de tabela retorna as linhas de tempdb.

Consultas com chamadas para funções valoradas em tabela geram planos de consulta com o iterador Função Valorada em Tabela. A função com valor de tabela pode ser avaliada com valores de parâmetro diferentes:

O Leitor XML de Função com valor de tabela insere um BLOB XML como um parâmetro e produz um conjunto de linhas que representa nós XML na ordem do documento XML. Outros parâmetros de entrada podem restringir nós XML retornados a um subconjunto de documento XML.

O leitor XML de função com valor de tabela com filtro XPath é um tipo especial de função com valor de tabela de leitor XML que restringe a saída a nós XML que satisfazem uma expressão XPath.



A Função com valor de tabela é um operador lógico e físico.
Ícone do operador superior os principais O operador Top verifica a entrada, retornando apenas o primeiro número especificado ou porcentagem de linhas, possivelmente com base em uma ordem de classificação. A Argument coluna pode conter uma lista das colunas que estão sendo verificadas quanto a vínculos. Nos planos de atualização, o operador Top é usado para impor limites de contagem de linhas. Top é um operador lógico e físico. Top é um operador lógico e físico.
Nenhum Classificação dos N Principais Top N Sort é semelhante ao Sort iterador, exceto que apenas as primeiras N linhas são necessárias, e não todo o conjunto de resultados. Para valores pequenos de N, o mecanismo de execução de consulta do SQL Server tenta executar toda a operação de classificação na memória. Para valores grandes de N, o mecanismo de execução de consulta recorre ao método mais genérico de classificação ao qual N não é um parâmetro.
Ícone de operador estendido (UDX) UDX Os Operadores Estendidos (UDX) implementam uma das muitas operações XQuery e XPath no SQL Server. Todos os operadores UDX são operadores lógicos e físicos.

O operador estendido (UDX) FOR XML é usado para serializar o conjunto de linhas relacionais que ele inseriu na representação XML em uma única coluna BLOB em uma única linha de saída. É um operador de agregação XML sensível à ordem.

O UDX (operador estendido) XML SERIALIZER é um operador de agregação XML sensível à ordem. Ele insere linhas que representam nós de XML ou escalares XQuery na ordem do documento XML de entrada e produz um BLOB XML serializado em uma única coluna XML em uma única linha de saída.

O operador estendido (UDX) XML FRAGMENT SERIALIZER é um tipo especial de XML SERIALIZER usado para processar linhas de entrada que representam fragmentos XML sendo inseridos na extensão de modificação de dados de inserção do XQuery.

O operador estendido (UDX) XQUERY STRING analisa o valor da cadeia de caracteres XQuery das linhas de entrada que representam nós XML. É um operador de agregação de cadeia de caracteres sensível à ordem. Ele gera uma linha com colunas que representam o escalar XQuery que contém o valor da cadeia de caracteres da entrada.

O operador estendido (UDX) XQUERY LIST DECOMPOSER é um operador de decomposição de listas XQuery. Para cada linha de entrada que representa um nó XML, ela produz uma ou mais linhas, cada uma representando o escalar XQuery que contém um valor de elemento de lista se a entrada for do tipo de lista XSD.

O operador estendido (UDX) XQUERY DATA avalia a função XQuery fn:data() na entrada que representa nós XML. É um operador de agregação de cadeia de caracteres sensível à ordem. Ele gera uma linha com colunas que representam o escalar XQuery que contém o resultado de fn:data().

O operador XQUERY CONTAINS estendido avalia a função XQuery fn:contains() na entrada que representa nós XML. É um operador de agregação de cadeia de caracteres sensível à ordem. Ele gera uma linha com colunas que representam o escalar XQuery que contém o resultado de fn:contains().

O operador UPDATE XML NODE estendido atualiza o nó XML na extensão de XQuery para modificação de dados com substituição, no método modify() no tipo XML.
Nenhum União O operador Union verifica várias entradas, gerando cada linha digitalizada e removendo duplicatas. Union é um operador lógico.
Ícone do operador Update (Mecanismo de Banco de Dados) Update O Update operador atualiza cada linha de sua entrada no objeto especificado na Argument coluna do plano de execução da consulta. Update é um operador lógico. O operador físico é Table Update, Index Updateou Clustered Index Update.
Ícone do elemento de linguagem While O While operador implementa a Transact-SQL durante o loop. While é um elemento de linguagem
Ícone do operador de spool de tabela Window Spool O Window Spool operador expande cada linha para o conjunto de linhas que representa a janela associada a ela. Em uma consulta, a cláusula OVER define a janela dentro de um conjunto de resultados de consulta e uma função de janela, em seguida, calcula um valor para cada linha na janela. Window Spool é um operador lógico e físico.