A menudo necesito ejecutar consultas en tablas grandes que no tienen el índice correcto. Entonces le pido al DBA que cree dicho índice. Lo primero que hace es mirar las estadísticas de la tabla y ver el tamaño del espacio del índice.
A menudo me decía que buscara una solución alternativa porque "el índice ya es más grande que la tabla". Siente que el índice tiene que ser más pequeño que los datos, porque me dijo "¿alguna vez has visto el índice en un libro? Es mucho más pequeño que el libro en sí, y así debería ser un índice de tabla".
No creo que su filosofía sea correcta, pero no puedo desafiarlo porque es un DBA líder y yo soy un desarrollador. Creo que si una consulta necesita un índice, el índice solo debe crearse, en lugar de encontrar "soluciones" que solo hagan SP ilegibles e imposibles de mantener.
Estoy seleccionando solo las columnas requeridas. El problema es que estoy filtrando por fecha, por lo que el motor necesariamente hará un escaneo de la tabla para que coincida con las columnas. La consulta se ejecuta una vez al día, por la noche, para recopilar estadísticas, pero tarda 15 minutos en ejecutarse (tenemos otra regla estricta y rápida: ningún procedimiento debería tomar más de 3 minutos).
El DBA me mostró las estadísticas del índice. Había alrededor de 10 índices en esa tabla, de los cuales solo se usaron 6 (las estadísticas mostraron cero golpes a 4 de ellos). Este es un sistema grande con más de 20 desarrolladores participando. Los índices se crearon por cualquier motivo, y probablemente ya no se usan.
Estamos obligados a admitir SQL Server 2008, ya que en eso se ejecutan los DB de prueba. Pero todos los clientes están en 2014 y 2016.