O que é o operador BMK no SQLServer

8

Eu estava tentando responder a esta pergunta afirmando que a cláusula é opcional. Mas estou preso a um Operador no plano. Abaixo, é uma captura de tela do plano de execução.

insira a descrição da imagem aqui

Como você pode ver, existe um operador BMK no plano de consulta, mas nenhuma indicação mostra como é calculado.

etapas que tentei até agora:
comecei a pesquisar com o BMK1000, mas ele mostra um monte de perguntas com o mesmo operador. Finalmente encontrei um segmento que diz "O BMK que você está referenciando é o local de armazenamento no heap que é mantido com o índice não clusterizado em vez da chave de cluster. "... Mas não sei como isso está relacionado a mim, pois não tenho índices ..

PERGUNTE:
qual é o operador BMK e como é calculado. Quaisquer indicadores também serão úteis

Aqui está o SQLFiddle para reproduzir novamente o problema

TheGameiswar
fonte

Respostas:

11

Não é um operador por si só. É uma coluna de saída do operador de varredura de tabela na pilha. É o "marcador" que contém o endereço físico da linha (este é o mesmo marcador mencionado na frase "pesquisa de marcador").

Isso é passado ao longo do pipeline para o operador de atualização, para que ele saiba a linha que deve estar atualizando.

No SQL Server 2016, você pode ver os valores reais dessa coluna usando o query_trace_column_valuesevento estendido

insira a descrição da imagem aqui

Conectá-los sys.fn_PhysLocFormattermostra ofile:page:slot

SELECT sys.fn_PhysLocFormatter(0xB002000001), 
       sys.fn_PhysLocFormatter(0xB0020000010001)

Devoluções

+------------------+------------------+
| (No column name) | (No column name) |
+------------------+------------------+
| (1:688:0)        | (1:688:1)        |
+------------------+------------------+
Martin Smith
fonte