Muitas vezes, preciso executar consultas em tabelas grandes que não têm o índice correto. Então, peço ao DBA para criar esse índice. A primeira coisa que ele faz é olhar para as estatísticas da tabela e ver o tamanho do espaço do índice.
Muitas vezes, ele me dizia para encontrar uma solução alternativa porque "o índice já é maior que a tabela". Ele acha que o índice precisa ser menor que os dados, porque, ele me disse: "você já viu o índice em um livro? É muito menor que o próprio livro, e é assim que um índice de tabela deve ser".
Não acho que a filosofia dele esteja correta, mas não posso desafiá-lo porque ele é um DBA líder e sou desenvolvedor. Sinto que, se uma consulta precisar de um índice, o índice deve ser criado, em vez de encontrar "soluções alternativas" que apenas tornem os SPs ilegíveis e não-mantidos.
Estou selecionando apenas as colunas necessárias. O problema é que estou filtrando por data, para que o mecanismo faça necessariamente uma varredura de tabela para corresponder às colunas. A consulta é executada uma vez por dia, à noite, para coletar estatísticas, mas leva 15 minutos para ser executada (temos outra regra rígida e rápida: nenhum procedimento deve levar mais de 3 minutos).
O DBA me mostrou as estatísticas do índice. Havia cerca de 10 índices nessa tabela, dos quais apenas 6 foram usados (as estatísticas mostraram zero ocorrências em 4 delas). Este é um sistema grande com a participação de mais de 20 desenvolvedores. Os índices foram criados por qualquer motivo e provavelmente não são mais usados.
Somos obrigados a oferecer suporte ao SQL Server 2008, pois é nisso que os bancos de dados de teste são executados. Mas os clientes são todos em 2014 e 2016.