Referência de operador lógico e físico para o plano de execução

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure

Os operadores descrevem como o SQL Server executa uma consulta ou uma instrução DML (Linguagem de Manipulação de Dados). O otimizador de consultas usa os operadores para criar um plano de consulta a fim de criar o resultado especificado na consulta ou para executar a operação especificada na instrução DML. O plano de consulta é uma árvore que consiste em operadores físicos. É possível exibir o plano de consulta ao usar as instruções SET SHOWPLAN, as opções do plano de execução gráfico no SQL Server Management Studio ou os eventos do plano de execução de Eventos Estendidos.

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

Operadores lógicos

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

Operadores físicos

Os operadores físicos implementam a operação descrita pelos 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 realizam operações como cálculos, agregações, verificações de integridade de dados ou junções. Os operadores físicos possuem custos associados.

Os operadores físicos iniciam, coletam dados e fecham. Especificamente, o operador físico pode responder às três chamadas de método abaixo:

  • Open(): o método Open() faz com que um operador físico realize a inicialização e a configuração das estruturas de dados necessárias. Embora o operador físico possa receber muitas chamadas Open(), geralmente ele recebe apenas uma.

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

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

O método GetRow() retorna uma linha de dados e o número de vezes que ele é chamado aparece como ActualRows na saída do plano de execução que é produzida pelo plano de execução gráfico e XML. Para obter mais informações sobre essas opções SET, confira SET STATISTICS PROFILE (Transact-SQL) e SET STATISTICS XML (Transact-SQL).

As contagens ActualRebinds e ActualRewinds que aparecem na saída do plano de execução referem-se ao número de vezes que o método Open() é chamado. A menos que um operador esteja no lado interno de uma junção de loops aninhados, ActualRebinds será igual a um e ActualRewinds será igual a zero. Se um operador estiver no lado interno de uma junção de loop, o número total de reassociações e retrocessos deverá ser igual ao número de linhas processadas no lado externo da junção. Uma reassociação significa que um ou mais dos parâmetros correlatos da junção se alterou e o lado interno deve ser reavaliado. Um retrocesso significa que nenhum dos parâmetros correlacionados foi alterado e o conjunto de resultados interno anterior pode ser reutilizado.

ActualRebinds e ActualRewinds estão presentes na saída do plano de execução XML produzida ao usar SET STATISTICS XML ON e o plano de execução gráfico. O preenchimento ocorre apenas para os operadores Nonclustered Index Spool, Remote Query, Row Count Spool, Sort, Table Spool e Table-valued Function. ActualRebinds e ActualRewinds também podem ser preenchidos para os operadores Assert e Filter quando o atributo StartupExpression estiver definido como TRUE.

Quando ActualRebinds e ActualRewinds estiverem presentes em um plano de execução XML, serão comparáveis a EstimateRebinds e EstimateRewinds. Quando estiverem ausentes, o número estimado de linhas (EstimateRows) será comparável ao número real de linhas (ActualRows). A saída do plano de execução gráfico real exibirá zeros para as reassociações e os retrocessos reais quando eles estiverem ausentes.

Um contador relacionado, ActualEndOfScans, está disponível no plano de execução XML e gráfico. Sempre que um operador físico alcança o final do seu fluxo de dados, esse contador é incrementado em um. Um operador físico pode chegar ao término de seu fluxo de dados zero, uma ou mais vezes. De forma semelhante a como acontece com as reassociações e os retrocessos, a contagem de término do processo de verificação poderá ser superior a um somente se o operador estiver no lado interno de uma junção de loop. A contagem de término do processo de verificação deve ser inferior ou igual à soma do número de reassociações e retrocessos.

Mapear operadores lógicos e físicos

O otimizador de consulta criará um plano de consulta no formato de árvore que consistirá em operadores lógicos. Após criar o plano, o otimizador de consulta escolherá o operador físico mais eficiente para cada operador lógico. O otimizador de consulta utiliza uma abordagem baseada em custos para determinar qual operador físico implementa um operador lógico.

Normalmente, uma operação lógica pode ser implementada por diversos operadores físicos. Em alguns casos raros, porém, um operador físico também pode implementar diversas operações lógicas.

Execução em modo de lote

A execução em modo de lote corresponde a um método de processamento de consulta usado para processar várias linhas simultaneamente (por isso o termo lote) em vez de uma linha por vez. O processamento em modo de lote usa algoritmos otimizados para CPUs com vários núcleos e maior produtividade de memória em um hardware moderno. O modo de lote pode ser usado por um conjunto de operadores para objetos rowstore e columnstore. Para obter mais informações, consulte Guia da Arquitetura de Processamento de Consultas.

Descrições dos operadores

Esta seção contém descrições dos operadores lógicos e físicos. É possível exibir as propriedades de planos de consulta e de operadores ao usar o painel Propriedades na exibição Plano de Consulta do SQL Server Management Studio (SSMS) e do Azure Data Studio.

Dica

Sempre que um determinado ícone do plano de execução gráfico tiver um círculo amarelo com duas setas da direita para a esquerda, isso significará uma execução em paralelo do operador. Para obter mais informações sobre paralelismo, confira o Guia de arquitetura de threads e tarefas.

Ícone Operador de plano de execução Descrição
Junção Adaptável O operador de Junção Adaptável permite que a escolha do método de junção hash ou de loops aninhados seja adiada até depois do exame da primeira entrada.

O Adaptive Join é um operador físico. Para obter mais informações, confira Noções básicas sobre junções adaptáveis.
Aggregate O operador Aggregate calcula uma expressão que contém MIN, MAX, SUM, COUNT ou AVG.

O Aggregate é um operador lógico e físico.
Arithmetic Expression O operador Arithmetic Expression computa um valor novo de valores existentes em uma linha. O Arithmetic Expression não é usado em versões mais recentes do SQL Server.
Assert O operador Assert verifica uma condição. Por exemplo, ele valida integridade referencial ou assegura que uma subconsulta escalar retorne uma linha. Para cada linha de entrada, o operador Assert avalia a expressão no painel Propriedades do plano de execução. Se essa expressão for avaliada como NULL, a linha será passada pelo operador Assert e a execução da consulta continuará. Se essa expressão for avaliada como um valor que não é nulo, o erro apropriado será gerado.

O Assert é um operador físico.
Atribuir O operador Assign atribui o valor de uma expressão ou constante a um variável.

Assign é um elemento de linguagem.
Nenhum Async Concat O operador Async Concat só é usado em consultas remotas (consultas distribuídas). Ele tem n filhos e um nó pai. Normalmente, alguns dos filhos são computadores remotos que participam de uma consulta distribuída. O Async Concat emite Open() chamadas simultaneamente a todos os filhos e aplica um bitmap para cada filho. Para cada bit que é um valor 1, o Async Concat envia as linhas de saída para o nó pai sob demanda.
Bitmap SQL Server usa o operador Bitmap para implementar filtros de bitmap em planos de consulta paralelos. A filtragem de bitmap acelera a execução da consulta ao eliminar as linhas com valores de chave que não podem produzir registros de junção antes de passar as linhas por outro operador, como o operador Parallelism. Um filtro de bitmap usa uma representação compacta de um conjunto de valores de uma tabela em uma parte da árvore de operador de uma segunda tabela em outra parte da árvore. Com a remoção de linhas desnecessárias previamente na consulta, os operadores subsequentes têm menos linhas para trabalhar e o desempenho geral da consulta melhora. O otimizador de consulta determina quando um bitmap é seletivo o bastante para ser útil e em quais operadores o filtro é aplicado.

Bitmap é um operador físico.
Bitmap Create O operador Bitmap Create aparece na saída do plano de execução em que os bitmaps são desenvolvidos.

Bitmap Create é um operador lógico.
Nenhum Branch Repartition Às vezes, em um plano de consulta paralelo, há regiões conceituais de iteradores. Todos os iteradores dentro de tal região podem ser executados por threads paralelos. As próprias regiões devem ser executadas em série. Alguns dos iteradores Parallelism em uma região individual são chamados Branch Repartition. O iterador Parallelism no limite dessas duas regiões é chamado Segment Repartition.

Branch Repartition e Segment Repartition são operadores lógicos.
Broadcast Broadcast tem um nó filho e n nós pai. Broadcast envia suas linhas de entrada para vários consumidores sob demanda. Cada consumidor adquire todas as linhas. Por exemplo, se todos os consumidores representam lados de desenvolvimento de uma junção hash, então n cópias das tabelas de hash são desenvolvidas.
Build Hash Indica o desenvolvimento de uma tabela de hash em lote para um índice columnstore com otimização de memória.

Aplica-se a: SQL Server 2012 (11.x) somente.
Clustered Index Delete O operador Clustered Index Delete exclui as linhas do índice clusterizado especificado na propriedade Object, listada no painel Propriedades dos planos de execução gráfico e XML. Se um SeekPredicate ou um Predicate estiver presente, somente as linhas que satisfazem o predicado serão excluídas.

Observação: as alterações nos índices clusterizados podem afetar os índices não clusterizados.

O Clustered Index Delete é um operador físico.
Clustered Index Insert O operador Clustered Index Insert insere as linhas da entrada no índice clusterizado especificado na propriedade Object, listada no painel Propriedades dos planos de execução gráfico e XML. O plano de execução XML inclui propriedades SetPredicate e ColumnReference, que podem ser usadas para a determinação do valor para o qual cada coluna é definida. Se Clustered Index Insert não tiver valores filhos para os valores de inserção, a linha inserida será obtida do próprio operador Insert.

Observação: as alterações nos índices clusterizados podem afetar os índices não clusterizados.

O Clustered Index Insert é um operador físico.
Clustered Index Merge O operador Clustered Index Merge aplica um fluxo de mesclagem de dados a um índice clusterizado. O operador exclui, atualiza ou insere linhas do índice clusterizado especificado na propriedade Object, listada no painel Propriedades dos planos de execução gráfico e XML. A operação real executada depende do valor de runtime da propriedade ActionColumn.

Observação: as alterações nos índices clusterizados podem afetar os índices não clusterizados.

Clustered Index Merge é um operador físico.
Clustered Index Scan O operador Clustered Index Scan verifica o índice clusterizado especificado na propriedade Object, listada no painel Propriedades dos planos de execução gráfico e XML. Quando um Predicate opcional está presente, somente as linhas que satisfazem o predicado são retornadas. Se a propriedade Ordered no painel Propriedades ou no plano de execução XML for True, o processador de consultas determinou que as linhas devem ser retornadas na ordem em que o índice clusterizado as classificou. Se a propriedade Ordered for False, o Mecanismo de Banco de Dados verificará o índice da maneira ideal, sem necessariamente classificar a saída.

Clustered Index Scan é um operador lógico e físico.
Clustered Index Seek O operador Clustered Index Seek usa a habilidade de busca de índices para recuperar linhas de um índice cluster. A propriedade Object, listada no painel Propriedades dos planos de execução gráfico e XML, contém o nome do índice clusterizado que está sendo usado. O SeekPredicate contém o predicado para a busca. O Mecanismo de Banco de Dados usa o índice para realizar o processamento somente das linhas que satisfazem o SeekPredicate. Além disso, é possível incluir uma propriedade Predicate na qual o Mecanismo de Banco de Dados avalia todas as linhas que satisfazem o SeekPredicate, mas isso é opcional e não usa índices para a conclusão desse processo.

Se a propriedade Ordered no painel Propriedades ou no plano de execução XML for True, o processador de consultas determinou que as linhas devem ser retornadas na ordem em que o índice clusterizado as classificou. Se a propriedade Ordered for False, o Mecanismo de Banco de Dados pesquisará o índice da maneira ideal, sem necessariamente classificar a saída. Exigir que a saída mantenha a ordem pode ser menos eficiente do que produzir uma saída não classificada.

Clustered Index Seek é um operador lógico e físico.
Clustered Index Update O operador Clustered Index Update realiza atualizações das linhas de entrada no índice clusterizado especificado na propriedade Object, listada no painel Propriedades dos planos de execução gráfico e XML. Se a propriedade Predicate estiver presente, somente as linhas que satisfazem esse predicado serão atualizadas. Se a propriedade SetPredicate estiver presente, cada coluna atualizada será definida com esse valor. Se a propriedade DefineValue estiver presente, os valores definidos por esse operador serão listados. Esses valores podem ser referenciados na cláusula SET ou em outro local desse operador e em outro local dessa consulta.

Observação: as alterações nos índices clusterizados podem afetar os índices não clusterizados.

Clustered Index Update é um operador lógico e físico.
Recolher O operador Collapse otimiza processamento de atualização. Quando uma atualização é executada, ela pode ser dividida (usando o operador Split ) em uma exclusão e uma entrada. O painel Propriedades contém um predicado group by que especifica uma lista de colunas de chaves. Se o processador de consultas encontrar linhas adjacentes que excluem e inserem valores de chave semelhantes, ele substituirá essas operações separadas por uma operação de atualização única e mais eficiente.

Collapse é um operador lógico e físico.
Columnstore Index Delete O operador Columnstore Index Delete representa a exclusão de linhas do índice columnstore especificado na propriedade Object, listada no painel Propriedades dos planos de execução gráfico e XML. A exclusão ocorre por meio do Clustered Index Delete para um índice columnstore clusterizado e por meio do operador Index Delete para um índice columnstore não clusterizado. O tipo de índice (Clustered, NonClustered ou ViewNonClustered) é especificado na propriedade IndexKind no plano de execução XML. O SeekPredicate não é compatível com um Columnstore Index Delete. As linhas a serem excluídas são lidas de um operador filho.

O Columnstore Index Delete é um operador físico.
Columnstore Index Insert O operador Columnstore Index Insert representa a inserção de linhas da entrada no índice columnstore especificado na propriedade Object, listada no painel Propriedades dos planos de execução gráfico e XML. A inserção ocorre por meio do Clustered Index Insert para um índice columnstore clusterizado e por meio do operador Index Insert para um índice columnstore não clusterizado. O tipo de índice (Clustered, NonClustered ou ViewNonClustered) é especificado na propriedade IndexKind no plano de execução XML. O plano de execução XML inclui propriedades SetPredicate e ColumnReference, que podem ser usadas para a determinação do valor para o qual cada coluna é definida.

Observação: as alterações nos índices clusterizados podem afetar os índices não clusterizados.

O Columnstore Index Insert é um operador físico.
Columnstore Index Merge O Columnstore Index Merge representa a aplicação de um fluxo de dados de mesclagem usando o operador Clustered Index Merge. O operador exclui, atualiza ou insere linhas do índice columnstore clusterizado especificado na propriedade Object, listada no painel Propriedades dos planos de execução gráfico e XML. A operação real executada depende do valor de runtime da propriedade ActionColumn.

Observação: as alterações nos índices clusterizados podem afetar os índices não clusterizados.

O Columnstore Index Merge é um operador físico.
Verificação de Índice Columnstore O operador Columnstore Index Scan representa um processo de verificação para o índice columnstore especificado na propriedade Object, listada no painel Propriedades dos planos de execução gráfico e XML. O processo de verificação ocorre por meio do Clustered Index Scan para um índice columnstore clusterizado e por meio do operador Index Scan para um índice columnstore não clusterizado. O tipo de índice (Clustered, NonClustered ou ViewNonClustered) é especificado na propriedade IndexKind no plano de execução XML. Quando um Predicate opcional está presente, somente as linhas que satisfazem o predicado são retornadas. A propriedade SeekPredicate está disponível somente para um índice columnstore particionado e apenas para condições de igualdade ou desigualdade. Se a coluna particionada estiver no predicado de consulta, a eliminação da partição poderá reduzir o número de rowgroups a passar pelo processo de verificação.

O Columnstore Index Scan é um operador físico.
Columnstore Index Update O operador Columnstore Index Update representa uma atualização para uma ou mais linhas no índice columnstore especificado na propriedade Object, listada no painel Propriedades dos planos de execução gráfico e XML. As atualizações ocorrem por meio do operador Clustered Index Update para um índice columnstore clusterizado e por meio do operador Index Update para um índice columnstore não clusterizado. O tipo de índice (Clustered, NonClustered ou ViewNonClustered) é especificado na propriedade IndexKind no plano de execução XML. O SeekPredicate não é compatível com um Columnstore Index Update. As linhas a serem atualizadas são lidas de um operador filho. Se a propriedade SetPredicate estiver presente, cada coluna atualizada será definida com esse valor. Se a propriedade DefineValue estiver presente, os valores definidos por esse operador serão listados. Esses valores podem ser referenciados na cláusula SET ou em outro local desse operador e em outro local dessa consulta.

Observação: as alterações nos índices clusterizados podem afetar os índices não clusterizados.

O Columnstore Index Update é um operador físico.
Compute Scalar O operador Compute Scalar avalia uma expressão para produzir um valor escalar computado. Em seguida, isso pode ser retornado ao usuário, referenciado em outra parte da consulta ou ambos. Um exemplo de ambos está em um predicado de filtro ou predicado de junção.

Os operadores Compute Scalar que aparecem nos planos de execução gerados por SET STATISTICS XML podem não conter o elemento RunTimeInformation. Em planos de execução gráficos, Actual Rows, Actual Rebinds e Actual Rewinds poderão estar ausentes da janela Propriedades quando a opção Incluir Plano de Execução Real estiver selecionada no SQL Server Management Studio. Quando isso ocorre, significa que, embora esses operadores tenham sido utilizados no plano de consulta compilada, o trabalho foi executado por outros operadores no plano de consulta de runtime. O número de execuções na saída do plano de execução gerada por SET STATISTICS PROFILE é equivalente à soma de reassociações e retrocessos nos planos de execução gerados por SET STATISTICS XML.

OCompute Scalar é um operador lógico e físico.
Concatenation O operador Concatenation verifica várias entradas, retornando cada linha verificada. Geralmente, o Concatenation é usado para implementar o constructo UNION ALL do Transact-SQL. O operador físico Concatenation tem duas ou mais entradas e uma saída. Concatenation copia linhas do primeiro fluxo de entrada ao fluxo de saída e repete essa operação para cada fluxo de entrada adicional.

Concatenation é um operador lógico e físico.
Conditional (If e While) O operador Conditional realiza um processamento condicional com base em um loop IF ou WHILE. If e While são elementos de linguagem.
Constant Scan O operador Constant Scan introduz uma ou mais linhas constantes em uma consulta. Um operador Compute Scalar é frequentemente usado após uma Constant Scan para acrescentar colunas a uma linha produzida pelo operador Constant Scan . O Constant Scan pode gerar uma ou mais linhas com zero ou mais colunas.
Converter O operador Convert converte um tipo de dados escalar em outro.

Convert é um elemento de linguagem.
Cross Join O operador Cross Join une cada linha da primeira entrada (superior) a cada linha da segunda entrada (inferior).

Cross Join é um operador lógico.
Cursor Os operadores lógicos e físicos Cursor são usados para descrever como é executada uma consulta ou atualização que envolva operações de cursor. Os operadores físicos descrevem o algoritmo de implementação físico 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 quando o cursor é somente leitura.

Os operadores lógicos incluem Asynchronous, Optimistic, Primary, Read Only, Scroll Locks, Secondary e Synchronous.

Os operadores físicos incluem Dynamic, Fetch Query, Keyset, Population Query, Refresh Query e Snapshot.
Declare O operador Declare aloca uma variável local no plano de consulta.

Declare é um elemento de linguagem.
Delete (excluir) O operador Delete exclui linhas (de um objeto) que atendem ao predicado opcional no painel Propriedades.
Deleted Scan Nos gatilhos, o operador Deleted Scan verifica a tabela excluída.
Nenhum Distinto O operador Distinct remove duplicatas de um conjunto de linhas ou de uma coleção de valores.

Distinct é um operador lógico.
Nenhum Distinct Sort O operador lógico Distinct Sort verifica a entrada ao remover duplicatas e classificar pelas colunas especificadas no predicado distinct order by do painel Propriedades.

Distinct Sort é um operador lógico.
Distribute Streams O operador Distribute Streams só é usado em planos de consulta paralelos. O operador Distribute Streams leva um fluxo de entrada simples de registros e produz fluxos de saída múltiplos. O conteúdo e o formato do registro não sofrem alterações. Cada registro do fluxo de entrada aparece em um dos fluxos de saída. Este operador preserva automaticamente a ordem relativa dos registros de entrada nos fluxos de saída. Normalmente, são usadas operações de hash para decidir a qual fluxo de saída pertence um determinado registro de entrada.

Se a saída for particionada, o painel Propriedades conterá um predicado partition columns e as colunas de particionamento.

Distribute Streams é um operador lógico
Dinâmico O operador Dynamic usa um cursor que pode ver todas as alterações feitas por outros.
Eager Spool O operador Eager Spool pega toda a entrada, armazenando cada linha em um objeto temporário oculto armazenado no banco de dados tempdb . Se for feito o retrocesso do operador (por exemplo, por um operador Nested Loops ) sem que haja necessidade de reassociação, serão usados os dados em spool em vez de um novo exame da entrada. Se a reassociação for necessária, os dados em spool serão descartados e o objeto de spool será recriado por meio do novo exame da entrada (religação). O operador Eager Spool cria seu arquivo de spool de maneira “ávida”, ou seja, cada vez que 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.

OEager Spool é um operador lógico.
Fetch Query O operador Fetch Query recupera linhas quando é feita uma busca em um cursor.
Filter O operador Filter verifica a entrada ao retornar somente as linhas que satisfazem a expressão de filtro (predicado) que aparece no painel Propriedades.
Nenhum Flow Distinct O operador Flow Distinct verifica a entrada ao remover duplicatas. Enquanto o operador Distinct consome todas as entradas antes de produzir saídas, o operador Flow Distinct retorna cada linha conforme obtida da entrada (a menos que essa linha seja duplicada; nesse caso, ela é descartada).

O Flow Distinct é um operador lógico.
Verificação de Referências de Chave Estrangeira O operador Foreign Key References Check executa verificações de integridade referencial no local ao comparar a linha modificada com as linhas nas tabelas de referência para verificar se a modificação não afeta a integridade referencial. O operador Verificação de Referências de Chave Estrangeira é usado quando mais de 253 referências de chave estrangeira existem na mesma chave primária ou exclusiva.

Verificação de Referências de Chave Estrangeira é um operador lógico e físico.
Full Outer Join O operador lógico Full Outer Join retorna cada linha que satisfaz o predicado de junção da primeira entrada (parte superior) associada a cada linha da segunda entrada (parte inferior). Ele também retorna linhas:

- Da primeira entrada que não teve correspondência na segunda entrada.

- Da segunda entrada que não teve correspondência 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.
Gather Streams O operador Gather Streams só é usado 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 ao combinar os fluxos de entrada. O conteúdo e o formato do registro não sofrem alterações. Se este operador for preservador da ordem, todos os fluxos de entrada deverão ser ordenados. Se a saída for ordenada, o painel Propriedades conterá um predicado order by e os nomes das colunas que estão sendo ordenadas.

Gather Streams é um operador lógico.
Hash Match O operador Hash Match cria uma tabela de hash computando um valor de hash para cada linha da entrada criada. Um predicado hash, com uma lista de colunas usadas para criar um valor de hash, aparece no painel Propriedades. Então, para cada fila de sondagem (conforme aplicável), ela computa 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:() no painel Propriedades), 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 as junções, use a primeira entrada (superior) para desenvolver a tabela de hash e a segunda entrada (inferior) para realizar a investigação da tabela de hash. As correspondências de saída (ou não correspondências) conforme determinadas pelo tipo de junção. Se várias junções usam a mesma coluna de junção, essas operações serão agrupadas em uma equipe de hash.

- Para os operadores distintos ou de agregação, use a entrada para desenvolver a tabela de hash (ao remover as duplicatas e ao computar as expressões de agregação). Quando a tabela de hash for criada, verifique a tabela e saída de todas as entradas.

- Para o operador de união, use a primeira entrada para desenvolver a tabela de hash (ao remover as duplicatas). Use a segunda entrada (que não deve ter uma duplicata) para sondar a tabela de hash, retornando todas linhas sem correspondência e, então, verifique a tabela de hash e retorne todas as entradas.

Hash Match é um operador físico. Para obter mais informações, confira Noções básicas sobre junções hash.
Index Delete O operador Index Delete exclui as linhas do índice não clusterizado especificado no painel Propriedades.

O Index Delete é um operador físico.
Index Insert O operador Index Insert insere as linhas da entrada no índice não clusterizado especificado no painel Propriedades. O painel Propriedades também contém um predicado set, que indica o valor para o qual cada coluna está definida.

Index Insert é um operador físico.
Index Scan O operador Index Scan recupera todas as linhas do índice não clusterizado especificado no painel Propriedades. Se um predicado where opcional aparecer no painel Propriedades, somente as linhas que satisfazem o predicado serão retornadas.

Index Scan é um operador lógico e físico.
Index Seek O operador Index Seek usa a capacidade de busca de índices para recuperar linhas de um índice não clusterizado. O painel Propriedades contém o nome do índice não clusterizado que está sendo usado. Ele também contém o predicado seek. O Mecanismo de Banco de Dados usa o índice para processar somente as linhas que satisfazem o predicado seek. Opcionalmente, ele pode incluir um predicado where, que o Mecanismo de Banco de Dados avalia em relação a todas as linhas que satisfazem o predicado seek (ele não usa os índices para fazer isso). Se o painel Propriedades contiver a cláusula ORDERED, o processador de consultas 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 Banco de Dados pesquisará o índice da maneira ideal (o que não garante que a saída seja classificada). Permitir que a saída mantenha a ordem pode ser menos eficiente do que produzir uma saída não classificada.

Index Seek é um operador lógico e físico.
Index Spool O operador Index Spool contém um predicado seek no painel Propriedades. O operador Index Spool examina suas linhas de entrada, colocando uma cópia de cada linha em um arquivo spool oculto (armazenado no banco de dados tempdb que existe somente durante o tempo de vida da consulta) e cria um índice não clusterizado nas linhas. Isso permite que você use a funcionalidade de busca de índices para gerar somente as linhas que satisfazem o predicado seek. Se for feito o retrocesso do operador (por exemplo, por um operador Nested Loops ) sem que haja necessidade de reassociação, serão usados os dados em spool em vez de um novo exame da entrada.

O Index Spool é um operador físico.
Index Update O operador físico Index Update realiza atualizações das linhas de entrada no índice não clusterizado especificado no painel Propriedades. Se um predicado set estiver presente, cada coluna atualizada será definida para esse valor.

O Index Update é um operador físico.
Inner Join O operador Inner Join retorna cada linha que satisfaz o predicado de junção da primeira entrada (superior) com a segunda entrada (inferior).

O Inner Join é um operador lógico.
Inserção O operador Insert insere cada linha da entrada no objeto especificado no painel Propriedades. O operador físico é o operador Table Insert, Index Insertou Clustered Index Insert .

O Insert é um operador lógico.
Inserted Scan Nos gatilhos, o operador Inserted Scan verifica a tabela inserida.

OInserted Scan é um operador lógico e físico.
Intrinsic O operador Intrinsic invoca uma função Transact-SQL interna.

Intrinsic é um elemento de linguagem.
Iterador O ícone genérico do Iterator é exibido quando um ícone adequado para o iterador não pode ser encontrado pela lógica que produz os planos de execução gráficos. O ícone genérico não indica necessariamente uma condição de erro.
Key Lookup O operador Key Lookup é uma pesquisa de indicadores em uma tabela com um índice clusterizado. O painel Propriedades contém o nome do índice clusterizado e a chave de cluster usada para pesquisar a linha no índice clusterizado. Key Lookup é sempre acompanhada por um operador Loops . Se a cláusula WITH PREFETCH aparecer no painel Propriedades, o processador de consulta determinou que é ideal usar a busca prévia assíncrona (leitura antecipada) ao pesquisar indicadores no índice clusterizado.

O uso de um operador Key Lookup em um plano de consulta indica que a consulta pode se beneficiar de ajuste de desempenho. Por exemplo, o desempenho da consulta pode ser melhorado adicionando-se um índice de cobertura.
Keyset O operador Keyset usa um cursor que pode visualizar atualizações, mas não inserções, feitas por outros.
Elemento Language O ícone genérico do Language Element é exibido quando um ícone adequado para o iterador não pode ser encontrado pela lógica que produz os planos de execução gráficos. O ícone genérico não indica necessariamente uma condição de erro.
Lazy Spool O operador lógico Lazy Spool armazena cada linha de sua entrada em um objeto temporário oculto armazenado no banco de dados tempdb . Se for feito o retrocesso do operador (por exemplo, por um operador Nested Loops ) sem que haja necessidade de reassociação, serão usados os dados em spool em vez de um novo exame da entrada. Se a reassociação for necessária, os dados em spool serão descartados e o objeto de spool será recriado por meio do novo exame da entrada (religação). 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 do spool obtém uma linha de seu operador de entrada e a armazena no spool, em vez de consumir todas as linhas de uma vez.

O Lazy Spool é um operador lógico.
Nenhum Left Anti Semi Join O operador Left Anti Semi Join retorna cada linha da primeira entrada (superior) quando não há linha correspondente na segunda entrada (inferior). Se não existir nenhum predicado de junção no painel Propriedades, cada linha será uma linha correspondente.

Left Anti Semi Join é um operador lógico.
Nenhum Left Outer Join O operador Left Outer Join retorna cada linha que satisfaz o predicado de junção da primeira entrada (superior) com a segunda entrada (inferior). Além disso, ele retorna todas as linhas da primeira entrada que não têm linhas correspondentes na segunda entrada. As linhas não correspondentes na segunda entrada são retornadas como valores nulos. Se não existir nenhum predicado de junção no painel Propriedades, cada linha será uma linha correspondente.

Left Outer Join é um operador lógico.
Nenhum Left Semi Join O operador Left Semi Join retorna cada linha da primeira entrada (superior) quando há uma linha correspondente na segunda entrada (inferior). Se não existir nenhum predicado de junção no painel Propriedades, cada linha será uma linha correspondente.

Left Semi Join é um operador lógico.
Log Row Scan O operador Log Row Scan examina o log de transações.

Log Row Scan é um operador lógico e físico.
Merge Interval O operador Merge Interval mescla vários intervalos (com sobreposição potencial) para produzir intervalos mínimo, não sobrepostos, usados para buscar entradas de índice. Normalmente, esse operador aparece antes de um ou mais operadores Compute Scalar sobre os operadores Constant Scan, com os constructos dos intervalos (representados como colunas em uma linha) que esse operador mescla.

Merge Interval é um operador lógico e físico.
Junção de Mesclagem O operador Merge Join executa a inner join, left outer join, left semi join, left anti semi join, right outer join, right semi join, right anti semi join e operações lógicas de união.

No painel Propriedades, o operador Merge Join conterá um predicado merge se a operação estiver executando uma junção de um para muitos, ou um predicado many-to-many merge se a operação estiver executando uma junção de muitos para muitos. O painel Propriedades 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 será particularmente efetiva se a classificação explícita não for necessária, por exemplo, se houver um índice de árvore B adequado no banco de dados ou se a ordem de classificação puder ser explorada para diversas operações, como uma junção de mesclagem e um agrupamento com rollup.

Merge Join é um operador físico. Para obter mais informações, confira Noções básicas sobre junções de mesclagem.
Nested Loops O operador Nested Loops executa operações lógicas de junção interna, junção externa esquerda, left semi join e left anti semi join.

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 consultas decide, com base em custos previstos, se classificará a entrada externa para aprimorar a localidade das pesquisas no índice da entrada interna. As linhas que satisfazem o predicado (opcional) no painel Propriedades serão retornadas conforme aplicável, com base na operação lógica que está sendo executada. Quando o atributo OPTIMIZED está definido como True, significa que um loop aninhado otimizado (ou que uma classificação em lote) está em uso.

Nested Loops é um operador físico. Para obter mais informações, consulte Noções básicas sobre junções de loops aninhados.
Nenhum Online Index Insert O operador Online Index Insert indica que uma operação de índice (criar, alterar ou descartar) é executada online. Ou seja, os dados da tabela subjacente permanecem disponíveis para usuários durante a operação de índice.

O Online Index Insert é um operador físico.
Nenhum Parallelism O operador Parallelism (ou iterador de troca) executa operações lógicas de fluxos de distribuição, coleta e repartição. O painel Propriedades pode conter um predicado partition columns com uma lista separada por vírgulas das colunas que estão sendo particionadas. O painel Propriedades também pode conter um predicado order by, que lista as colunas para preservar a ordem de classificação durante o particionamento.

Observação: se uma consulta tiver sido compilada como uma consulta paralela, mas em tempo de execução for executada como uma consulta serial, a saída do plano de execução gerada por SET STATISTICS XML ou ao usar a opção Incluir Plano de Execução Real no SQL Server Management Studio não conterá o elemento RunTimeInformation para o operador Parallelism. Na saída SET STATISTICS PROFILE, as contagens reais de linhas e o número real de execuções exibem zeros para o operador Parallelism. Quando qualquer uma das condições ocorre, significa que o operador Parallelism foi usado apenas durante a compilação da consulta e não no plano de consulta no runtime. Às vezes, os planos de consulta paralela são executados em série, se houver uma alta carga simultânea no servidor.

Parallelism é um operador físico. Para obter mais informações sobre o operador Parallelism, confira The Parallelism Operator.
Parameter Table Scan O operador Parameter Table Scan examina uma tabela que está atuando 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 Partial Aggregate 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 no disco (conhecida como “despejar”) não seja necessária. Hash Match é o único operador físico (iterador) que implementa a agregação parcial.

Agregação parcial é um operador lógico.
Population Query O operador Population Query popula a tabela de trabalho de um cursor quando o cursor é aberto.
Refresh Query O operador Refresh Query busca dados atuais para linhas do buffer de busca.
Remote Delete O operador Remote Delete exclui as linhas de entrada a partir de um objeto remoto.

Remote Delete é um operador lógico e físico.
Remote Index Scan O operador Remote Index Scan verifica o índice remoto especificado no painel Propriedades.

Verificação de Índice Remoto é um operador lógico e físico.
Remote Index Seek O operador de Busca de Índice Remoto usa a busca de um objeto de índice remoto para recuperar linhas. O painel Propriedades contém o nome do índice remoto que está sendo usado e o predicado seek.

O Remote Index Seek é um operador lógico e físico.
Remote Insert O operador Remote Insert insere linhas de entrada em um objeto remoto.

ORemote Insert é um operador lógico e físico.
Consulta remota O operador Remote Query submete uma consulta a uma fonte remota. O texto da consulta enviada ao servidor remoto aparece no painel Propriedades.

Remote Query é um operador lógico e físico.
Remote Scan O operador Remote Scan examina um objeto remoto. O nome do objeto remoto aparece no painel Propriedades.

Remote Scan é um operador lógico e físico.
Remote Update O operador Remote Update atualiza a linha de entrada em um objeto remoto.

Remote Update é um operador lógico e físico.
Repartition Streams O operador Repartition Streams (ou iterador de troca) consome vários fluxos e produz vários fluxos de registros. O conteúdo e o formato do registro não sofrem alterações. Se o otimizador de consulta usar um filtro de 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 for preservador de 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, o painel Propriedades conterá um predicado partition columns e as colunas de particionamento. Se a saída for ordenada, o painel Propriedades conterá um predicado order by e as colunas que estão sendo ordenadas. O operador é usado somente em planos de consulta paralelos.

Reparticionar Fluxos atua como um operador lógico.
Resultado O operador Result consiste nos dados retornados ao término de um plano de consulta. Este é, geralmente, o elemento raiz de um plano de execução.

Result é um elemento de linguagem.
RID Lookup RID Lookup é um indicador de pesquisa em um heap que usa um RID (identificador de linha) fornecido. O painel Propriedades contém o rótulo do indicador usado para pesquisar a linha na tabela e o nome da tabela na qual a linha é pesquisada. O RID Lookup é sempre acompanhado por NESTED LOOP JOIN.

RID Lookup é um operador físico. Para obter mais informações sobre pesquisas de indicadores, confira Read Committed and Bookmark Lookup.
Nenhum Right Anti Semi Join O operador Right Anti Semi Join gera cada linha da segunda entrada (inferior) quando não há uma linha correspondente na primeira entrada (superior). Uma linha correspondente é definida como uma linha que satisfaz o predicado no painel Propriedades (se não existir nenhum predicado, cada linha será uma linha correspondente).

Right Anti Semi Join é um operador lógico.
Nenhum Right Outer Join O operador Right Outer Join retorna cada linha que satisfaz a junção da segunda entrada (parte inferior) associada a cada linha correspondente da primeira entrada (parte superior). Além disso, ele retorna todas as linhas da segunda entrada que não tenham linhas correspondentes na primeira entrada, unidas por NULL. Se não existir nenhum predicado de junção no painel Propriedades, cada linha será uma linha correspondente.

Right Outer Join é um operador lógico.
Nenhum Right Semi Join O operador Right Semi Join retorna cada linha da segunda entrada (inferior) quando há uma linha correspondente na primeira entrada (superior). Se não existir nenhum predicado de junção no painel Propriedades, cada linha será uma linha correspondente.

Right Semi Join é um operador lógico.
Row Count Spool O operador Row Count Spool examina a entrada, contando quantas linhas estão presentes e retornando o mesmo número de linhas sem qualquer dado nelas. Esse operador é usado quando é importante verificar a existência de linhas, em vez dos dados contidos nas linhas. Por exemplo, se um operador Nested Loops executar uma operação de semijunçã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 operador Nested Loops pode determinar quantas linhas são geradas pelo spool de contagem de linhas (porque os dados reais do lado interno não são necessários) para determinar se a linha externa deve ser retornada.

ORow Count Spool é um operador físico.
Nenhum Segment Repartition Às vezes, em um plano de consulta paralelo, há regiões conceituais de iteradores. Todos os iteradores dentro de tal região podem ser executados por threads paralelos. As próprias regiões devem ser executadas em série. Alguns dos iteradores Parallelism em uma região individual são chamados Branch Repartition. O iterador Parallelism no limite dessas duas regiões é chamado Segment Repartition.

Branch Repartition e Segment Repartition são operadores lógicos.
Segment O operador Segment 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 . O operador produz então um segmento por vez.

O Segment é um operador lógico e físico.
Projeto de sequência O operador Sequence Project adiciona colunas para executar computações sobre um conjunto ordenado. Divide a entrada definida em segmentos baseado no valor de uma ou mais colunas. O operador produz então um segmento por vez. Estas colunas são mostradas como argumentos no operador Sequence Project .

Sequence Project é um operador lógico e físico.
Sequência O operador Sequence conduz amplos planos de atualização. Em termos funcionais, ele executa cada entrada em sequência (da parte superior até a inferior). Cada entrada normalmente é uma atualização de um objeto diferente. Ele retorna somente as linhas que vêm de sua última entrada (parte inferior).

Sequence é um operador lógico e físico.
Instantâneo O operador Snapshot cria um cursor que não visualiza as alterações feitas por outros.
Sort O operador Sort classifica todas as linhas de entrada. O painel Propriedades conterá um predicado distinct order by se as duplicatas forem removidas por essa operação ou um predicado order by com uma lista separada por vírgulas das colunas que estão sendo classificadas. As colunas serão prefixadas com o valor ASC se as colunas forem classificadas em ordem ascendente ou com o valor DESC se as colunas forem classificadas em ordem descendente.

Sort é um operador lógico e físico.
Dividir O operador Split é usado para otimizar o processamento da atualização. Ele divide cada operação de atualização em uma operação de exclusão e inserção.

Split é um operador lógico e físico.
Spool O operador Spool salva um resultado de consulta intermediário no banco de dados tempdb .
Stream Aggregate O operador Stream Aggregate agrupa linhas por uma ou mais colunas e, em seguida, calcula uma ou mais expressões de agregação retornadas pela consulta. A saída deste operador pode ser referenciada por operadores posteriores na consulta, retornada ao cliente, ou ambos. O operador Stream Aggregate requer a entrada de dados ordenada pelas colunas dentro de seus grupos. O otimizador usará um operador Sort antes desse operador se os dados ainda não estiverem classificados devido a um operador Sort anterior ou devido a uma busca ou a um processo de verificação de índice ordenado. Na instrução SHOWPLAN_ALL ou no plano de execução gráfico no SQL Server Management Studio, as colunas do predicado group by são listadas no painel Propriedades e as expressões de agregação são listadas na coluna Valores Definidos.

Stream Aggregate é um operador físico.
Switch 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), Switch copia o fluxo de entrada apropriado ao fluxo de saída. Um uso de Switch é implementar planos de consulta envolvendo cursores de avanço rápido com determinados operadores, como o operador TOP .

O Switch é um operador lógico e físico.
Table Delete O operador Table Delete exclui linhas da tabela especificada no painel Propriedades do plano de execução da consulta.

O Table Delete é um operador físico.
Table Insert O operador Table Insert insere as linhas da entrada na tabela especificada no painel Propriedades do plano de execução da consulta. O painel Propriedades também contém um predicado set, que indica o valor para o qual cada coluna está definida. Se Table Insert não tiver nenhum filho para valores de inserção, então a linha inserida será tirada do próprio operador Insert.

Table Insert é um operador físico.
Table Merge O operador Table Merge aplica um fluxo de dados de mesclagem a um heap. O operador exclui, atualiza ou insere as linhas na tabela especificada no painel Propriedades do operador. A operação real executada depende do valor de runtime da propriedade ActionColumn.

Table Merge é um operador físico.
Table Scan O operador Table Scan recupera todas as linhas da tabela especificada no painel Propriedades do plano de execução da consulta. Se um predicado where aparecer no painel Propriedades, somente as linhas que satisfazem o predicado serão retornadas.

Table Scan é um operador lógico e físico.
Table Spool O operador Table Spool 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 existe durante o tempo de vida da consulta. Se for feito o retrocesso do operador (por exemplo, por um operador Nested Loops ) sem que haja necessidade de reassociação, serão usados os dados em spool em vez de um novo exame da entrada.

Table Spool é um operador físico.
Table Update O operador Table Update realiza atualizações das linhas de entrada na tabela especificada no painel Propriedades 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 local desse operador e em outro local dessa consulta.

O Table Update é um operador físico.
Table-valued Function O operador Table-valued Function 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 pais solicitam as linhas, o operador Table-valued Function retorna as linhas de tempdb.

As consultas com chamadas às funções com valor de tabela geram planos de consulta com o iterador de Table-valued Function . Table-valued Function pode ser avaliada com valores de parâmetros diferentes:

O- Leitor de XML da Função com valor de tabela insere um BLOB XML como parâmetro e processa um conjunto de linhas representando os nós XML na ordem dos documentos XML. Outros parâmetros de entrada podem restringir nós XML retornados a um subconjunto de documentos XML.

- Leitor de XML da Função com valor de tabela com filtro XPath é um tipo especial de Função com valor de tabela do Leitor de XML que restringe a saída a nós XML que atendem a uma expressão XPath.

Table-valued Function é um operador lógico e físico.
Top O operador Top verifica a entrada, retornando só o primeiro número ou porcentagem de linhas especificado, possivelmente com base em uma ordem de classificação. O painel Propriedades pode conter uma lista das colunas que estão sendo verificadas quanto a camadas. Em planos de atualização, o operador Top é usado para aplicar os limites de contagem de linhas.

Top é um operador lógico e físico.
Nenhum Top N Sort Top N Sort é semelhante ao iterador Classificar , com exceção de que somente 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 consultas do SQL Server tenta executar toda a operação de classificação na memória. Para valores altos de N, o mecanismo de execução de consultas recorre ao método mais genérico de classificação para o qual N não é um parâmetro.
UDX Operadores estendidos (UDX) implementam uma de muitas operações XQuery e XPath no SQL Server.

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

- O operador estendido (UDX) XML SERIALIZER é um operador de agregação XML sensível à ordenação. Ele insere linhas que representam nós XML ou escalares de XQuery em ordem de documento XML e produz um XML BLOB 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 que é usado para realizar o processamento de linhas de entrada que representam fragmentos de XML sendo inseridos na extensão de modificação de dados de inserção do XQuery.

- O operador estendido (UDX) XQUERY STRING avalia o valor da sequência do XQuery para as linhas de entrada que representam nós XML. É um operador de agregação de sequência sensível à ordenação. Produz uma linha com colunas que representam o escalar de XQuery que contém o valor de cadeia de caracteres da entrada.

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

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

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

- O operador estendido UPDATE XML NODE realiza a atualização do nó XML na extensão de modificação de dados de substituição do XQuery no método modify() no tipo XML.

Os operadores UDX são operadores lógicos e físicos.
Union O operador Union verifica várias entradas, gerando a saída de cada linha examinada e removendo duplicatas.

Union é um operador lógico.
Atualizar O operador Update realiza atualizações de cada linha da entrada no objeto especificado no painel Propriedades do plano de execução da consulta.

Update é um operador lógico. O operador físico é Table Update, Index Updateou Clustered Index Update.
Window Spool O operador Window Spool expande cada linha no conjunto de linhas que representa a janela associada a ele. Em uma consulta, a cláusula OVER define a janela em um conjunto de resultados de consulta e uma função de janela e, em seguida, calcula um valor para cada linha na janela.

Window Spool é um operador lógico e físico.

Observação

A documentação usa o termo árvore B geralmente em referência a índices. Em índices de rowstore, o Database Engine implementa uma árvore B+. Isso não se aplica a índices columnstore ou índice em tabelas com otimização de memória. Para obter mais informações, confira o Guia de arquitetura e design do índice do SQL Server e SQL do Azure.