El límite exacto es realmente difícil de determinar con anticipación.
Una cosa que la mayoría de las personas subestima son los altos requisitos que debe cumplir un índice, antes de convertirse en candidato para ser utilizado en una consulta.
Un índice eficiente (no agrupado)
ofrece una gran selectividad , por ejemplo, devuelve solo un porcentaje muy pequeño (<1%, <2%) del total de filas. Si la selectividad no es un dato, el optimizador de consultas de SQL Server probablemente ignorará este índice
idealmente debería cubrir la consulta, es decir, devolver todas las columnas requeridas por la consulta. Si puede crear un índice que tenga 1 o 2 columnas de índice, e incluya otras pocas (2-4) columnas como columnas incluidas y, por lo tanto, pueda cubrir una consulta, entonces es probable que el optimizador de consultas use este índice. Lo que también significa: si su código siempre se usa SELECT * .....
para buscar todas las columnas , la probabilidad de que se utilicen índices disminuye, de manera bastante dramática, en realidad
Estoy seguro de que también hay muchos otros criterios, pero creo que estos dos son los más críticos. Por supuesto, siempre debe mantener sus índices debidamente mantenidos (reorganizar, reconstruir) y asegurarse de que las estadísticas asociadas con sus índices estén actualizadas.
PD: los índices no agrupados en columnas de clave externa son un caso especial; de manera predeterminada, siempre recomendaría agregarlos, ya que ayudan a acelerar tanto las comprobaciones de integridad referencial como JOIN
las restricciones de FK. Pero incluso aquí, es absolutamente válido "extender" esos índices de columna FK agregando algunas columnas "incluir" adicionales para que sean aún más útiles.