Referência de operadores lógicos e físicos
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.
Os operadores são classificados como lógicos e físicos. Os operadores lógicos descrevem uma consulta relacional que processa uma operação em um nível conceitual. Os operadores físicos, na verdade, implementam a operação definida por um operador lógico usando um método concreto ou algoritmo. Por exemplo, "junção" é uma operação lógica, ao passo que "junção de loops aninhados" é um operador físico.
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 executam outros tipos de operações: o operador Aggregate calcula uma expressão que contém MIN, MAX, SUM, COUNT ou AVG e o operador Merge Join executa diferentes tipos de operações de junção lógicas.Os operadores físicos iniciam, coletam dados e fecham. Especificamente, o operador físico pode responder às três chamadas de método abaixo:
Init(): o método Init() faz com que um operador físico se inicialize e define quaisquer estruturas de dados necessárias. O operador físico pode receber muitas chamadas Init(), entretanto, um operador físico costuma receber somente uma.
GetNext(): o método GetNext() faz um operador físico adquirir a primeira linha de dados ou a subseqüente. O operador físico pode receber zero ou muitas chamadas GetNext().
Close(): o método Close() faz um operador físico executar algumas operações de limpeza total e se desligar. Um operador físico só recebe uma chamada Close().
O método GetNext () retorna uma linha de dados e o número de vezes em que é chamado aparece como ActualRows na saída do Plano de Execução que é produzida usando as opções 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).
Os contadores ActualRebinds e ActualRewinds exibidos na saída do Plano de Execução 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 será igual a um e ActualRewinds será igual a zero. Se um operador estiver no lado interno de uma junção de loop, a soma do número de reassociações e retrocessos deve 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 correlatos se alterou e o conjunto de resultados interno anterior pode ser usado novamente.
ActualRebinds e ActualRewinds estão presentes na saída do Plano de Execução XML produzida usando a opção SET STATISTICS XML ON. Eles só são populados 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 populados para os operadores Assert e Filter quando o atributo StartupExpression é 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 de linhas real (ActualRows). Observe que a saída gráfica real do Plano de Execução exibe zeros para reassociações e retrocessos reais quando eles estão ausentes. Para obter mais informações sobre Planos de execução gráficos, consulte Exibindo planos de execução gráfica (SQL Server Management Studio).
Um contador relacionado, ActualEndOfScans, só está disponível quando a saída do Plano de Execução é produzida usando a opção SET STATISTICS XML ON. Sempre que um operador físico chega ao término de 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. Como com as reassociações e os retrocessos, o número de término de exames só poderá ser superior a um se o operador estiver no lado interno de uma junção de loop. O número de término de exames deveria ser inferior ou igual à soma do número de reassociações e retrocessos.
Os operadores físicos correspondem a algoritmos de execução. Exemplos de operadores físicos incluem exame/busca de índice, junção de loop aninhado, junção de mesclagem, junção/agregação de hash, agregação de fluxo. Os operadores físicos possuem custos associados. Cada etapa na execução de uma consulta ou instrução DML envolve um operador físico.
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 de criar 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 custos para determinar qual operador físico implementará 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.
Nesta seção
Esta seção contém descrições dos seguintes operadores lógicos e físicos:
|
Consulte também