Estou tentando determinar se este é ou não um bug de relatório de plano de execução ou um recurso real que está funcionando conforme o esperado.
No meu plano de execução, ao usar o MAXDOP 1, estou vendo a tabela inteira sendo verificada ( https://www.brentozar.com/pastetheplan/?id=HkPFquLdc - Muito inferior do plano O objeto 11 mostra ~ 2,5 milhões de linhas lidas, o que é toda a mesa).
No entanto, quando deixo o mecanismo escolher seu próprio plano sem dicas, ele fica paralelo ( https://www.brentozar.com/pastetheplan/?id=r12p5OUdc ) e faz uma correspondência de bitmap/hash e esse mesmo Object11 só mostra ~ 534k linhas lidas apesar de fazer uma varredura de índice e ter vários predicados em outras colunas que não estão no índice clusterizado.
Eu esperaria que o SQL tivesse que ler cada linha na tabela para avaliar cada predicado, mas talvez o PROBE IN (você não pode ver isso em colar o plano) no Objeto 11 no plano paralelo é capaz de "Filtrar páginas " pois a sonda está no PK/CX.
É um recurso que funciona como pretendido. Em planos de modo de linha paralela, o SQL Server pode introduzir uma compilação de bitmap na entrada de compilação de uma junção de hash para manter um controle aproximado das chaves de junção encontradas. Quando a junção de hash faz a transição da construção de sua tabela de hash para sondar a segunda entrada para correspondências, o bitmap é transferido para o lado da sonda e empurrado para baixo nessa ramificação do plano o máximo possível.
Esta técnica é conhecida como redução de semijunção precoce. O bitmap aproximado é usado para filtrar as linhas que possivelmente não podem ser unidas. Na melhor das hipóteses, o bitmap pode ser empurrado por toda a ramificação do probe até o método de acesso a dados e executado
INROW
.Quando a
INROW
otimização é aplicada, um bitmap de tamanho reduzido é aplicado pelo mecanismo de armazenamento enquanto as páginas estão sendo lidas. Todas as linhas que passam por esse filtro são exibidas ao processador de consulta, que aplica o bitmap de tamanho completo (possivelmente eliminando ainda mais linhas) antes que quaisquer predicados residuais na varredura ou busca sejam aplicados. Somente as linhas que passam nos testes de bitmap e nos predicados residuais são vistas saindo do operador de busca ou varredura.Mais detalhes em meus artigos: