Eu tenho um banco de dados no Microsoft SQL Server 2016, com uma tabela de cerca de um milhão de linhas, vamos chamar de livros. Essa consulta leva mais de um minuto, o que não é aceitável:
selecione * de livros onde publisher_id in (857413, 857317, 857316)
Existe um FK adequado de publisher_id para a tabela de editores. Eu exponho o Plano de Execução Estimado, e ele me diz que 100% do custo está na "Varredura de Índice Clusterizado (clustered)" na chave primária da tabela de livros. E o que me preocupa, não recomenda nenhum índice. Olhando para a consulta, parece óbvio que um índice ajudará. E, de fato, quando crio o índice, a consulta retorna os resultados instantaneamente. Alguma coisa corrompeu no meu banco de dados, talvez estatísticas? Ou você acredita que eu não deveria, em geral, confiar no que li no plano de execução estimado?
Há uma limitação em que não fornecerá índices ausentes quando o plano de consulta for trivial, talvez seja isso que você esteja encontrando.
Clique com o botão direito do mouse no operador SELECT e selecione Propriedades. Verifique se o Nível de Otimização é TRIVIAL.
Eu uso muito o plano de execução estimado ao solucionar problemas de desempenho. É raro que eu tenha o plano real. Em relação aos índices ausentes, não adiciono apenas o que o plano acha que está faltando. Eu testo o índice, variações dele, etc.