Aviso para estatísticas ausentes no plano de execução

23

Eu tenho uma situação que não consigo entender. Meu plano de execução do SQL Server diz que tenho estatísticas ausentes na tabela, mas as estatísticas já foram criadas:

Atenção

Mas se olharmos para a tabela, veremos que há uma estatística que foi criada automaticamente:

insira a descrição da imagem aqui

Alguém pode ajudar a entender como pode ser?

As estatísticas Auto_Update e Auto_Create estão ativadas no banco de dados atual.

Estou usando o SQL Server 2014.

Artashes Khachatryan
fonte

Respostas:

15

O aviso nem sempre corresponde às estatísticas de coluna única ausentes .

Não há uma maneira fácil de determinar com precisão a estatística exata que o otimizador procurou e não encontrou em todos os casos, mas é quase sempre uma estatística de várias colunas que forneceria algumas informações de correlação entre vários predicados de igualdade na consulta.

Talvez no seu caso corresponda exatamente aos predicados no filtro após a verificação em que o aviso aparece.

Seria bom se o SQL Server reportasse todas as colunas para o aviso de 'falta de estatística', mas infelizmente não é assim que funciona hoje.

Uma certa quantidade de tentativa e erro pode ser necessária para identificar a estatística de várias colunas que você precisa criar para remover o aviso. Observe que as estatísticas de várias colunas não podem ser criadas automaticamente. Apesar do aviso, você pode ou não achar que a qualidade da estimativa melhora, mesmo que a estatística ausente seja fornecida.

Paul White diz que a GoFundMonica
fonte
8

Como parece claro que já existe uma estatística para a coluna específica, ofereço duas possibilidades:

  1. O Object Explorer está apontado para um banco de dados diferente - desconfio que o banco de dados tenha DEVo nome, portanto, é possível que em um caso você esteja olhando para dev e em outro não.
  2. O plano que está sendo usado é anterior à criação da estatística (ou foi gerada anteriormente ou, menos provavelmente, algo impediu que uma recompilação fosse acionada quando a estatística foi criada).

Valide que a resposta simples (1) não é o problema e tente emitir a mesma consulta OPTION (RECOMPILE)para confirmar ou descartar (2).

Aaron Bertrand
fonte
11
Aaron Bertnand, muito obrigado pela sua resposta. Mas o Object Explorer está apontado para o banco de dados atual e a adição de OPTION (RECOMPILE) não corrige o problema. Quero adicionar também que minha consulta está executando um procedimento armazenado.
Artashes Khachatryan
2

Acabei de notar que, quando você receber esses avisos sobre estatísticas, se executar sua consulta ou procedimento com as configurações abaixo:

SET SHOWPLAN_ALL ON

insira a descrição da imagem aqui

você pode ver quais são as estatísticas ausentes:

insira a descrição da imagem aqui

e usando os scripts aqui, você pode ver quais estatísticas estão atualmente em vigor e, se estiver faltando, pode adicioná-las.

Marcello Miorelli
fonte