Y así entra en el arte del ajuste del rendimiento y las estrategias de indexación ...
Me parece lógico enmendar la definición de índice existente para incluir las columnas sugeridas
Voy a tomar su presupuesto y escribir una tercera definición de índice:
create index [idx_index3]
on [table1] (col1, col2, col3)
include (col4, col5, col6....);
Esa debería ser la CREATE INDEX
declaración que corresponde a su declaración citada.
Eso muy bien puede ser una solución prudente, pero depende . Aquí hay un par de ejemplos cuando digo que depende.
Si tiene una carga de trabajo común que consiste principalmente en consultas como esta:
select col1, col2, col3
from table1
where col1 = 1
and col2 = 2
and col3 = 3;
Entonces su idx_index1
índice sería sólido. Perfectamente estrecho, es un índice que satisface esa consulta sin datos extraños (sin tener en cuenta la definición del índice agrupado, si es que lo hay).
Pero si tiene una carga de trabajo que consiste en consultas principalmente como las siguientes:
select co11, col2, col3, col4, col5
from table1
where col1 = 1
and col2 = 2;
Entonces idx_index2
sería prudente, ya que es lo que se llama un índice de cobertura que evita la necesidad de una búsqueda de clave de regreso al índice agrupado (o una búsqueda de RID de regreso al montón). Esa definición de índice no agrupado abarcaría únicamente todos los datos que necesita la consulta.
Con su recomendación, sería adecuado para una consulta como la siguiente:
select co11, col2, col3, col4, col5
from table1
where col1 = 1
and col2 = 2
and col3 = 3;
Su idx_index3
recomendación sería un índice de cobertura que satisfaga los criterios de búsqueda para la consulta anterior.
El punto al que estoy tratando de llegar es una pregunta aislada como esta, no podemos responder esto definitivamente. Todo depende de cuál sea la carga de trabajo común y frecuente. Por supuesto, siempre puede definir estos tres índices para manejar cada tipo de consulta de muestra, pero luego se pone en duda el mantenimiento que se necesitará para mantener estos índices actualizados (piense: INSERT, ACTUALIZACIONES, DELETES). Esa es la sobrecarga de los índices.
Necesita diseccionar y evaluar la carga de trabajo, y determinar dónde serán las mejores ventajas. Si la primera consulta de muestra es la más común que se ejecuta decenas de veces por segundo, y hay una consulta muy poco frecuente como la tercera consulta de muestra, entonces no tendría sentido hinchar las páginas a nivel de hoja del índice con el INCLUDE
columnas sin clave. Todo depende de tu carga de trabajo.
Si comprende estrategias de indexación prudentes y comprende su carga de trabajo común, al aplicar ambas podrá encontrar cuál es la mejor ruta a seguir.