E assim entra a arte de ajustar o desempenho e estratégias de indexação ...
Parece-me lógico alterar a definição de índice existente para incluir as colunas sugeridas
Vou pegar sua cotação e escrever uma terceira definição de índice:
create index [idx_index3]
on [table1] (col1, col2, col3)
include (col4, col5, col6....);
Essa deve ser a CREATE INDEX
declaração que corresponde à sua declaração citada.
Isso pode muito bem ser uma solução prudente, mas depende . Aqui estão alguns exemplos quando digo que depende.
Se você tiver uma carga de trabalho comum que consiste principalmente em consultas como esta:
select col1, col2, col3
from table1
where col1 = 1
and col2 = 2
and col3 = 3;
Então seu idx_index1
índice seria sólido. Perfeitamente estreito, é um índice que satisfaz essa consulta sem dados estranhos (sem levar em consideração a definição do índice clusterizado, se houver).
Mas se você tiver uma carga de trabalho que consiste em consultas principalmente como as seguintes:
select co11, col2, col3, col4, col5
from table1
where col1 = 1
and col2 = 2;
Em seguida, idx_index2
seria sábio, como é que é chamado de índice de cobertura evitando a necessidade de um back-chave de pesquisa para o índice de cluster (ou uma pesquisa de volta RID para a pilha). Essa definição de índice não clusterizado abrangeria apenas todos os dados de que a consulta precisa.
Com sua recomendação, seria adequado para uma consulta como a seguinte:
select co11, col2, col3, col4, col5
from table1
where col1 = 1
and col2 = 2
and col3 = 3;
Sua idx_index3
recomendação seria um índice de cobertura que atenda aos critérios de pesquisa da consulta acima.
O ponto que estou tentando abordar é em uma pergunta isolada como esta que não podemos responder a isso definitivamente. Tudo depende de qual é a carga de trabalho comum e frequente. É claro que você sempre pode definir todos esses três índices para lidar com cada tipo de consulta de amostra, mas depois coloca em questão a manutenção necessária para manter esses índices atualizados (pense: INSERTs, UPDATEs, DELETEs). Essa é a sobrecarga dos índices.
Você precisa dissecar e avaliar a carga de trabalho e determinar onde as vantagens serão melhores. Se a primeira consulta de amostra é a mais comum, de longe, sendo executada dezenas de vezes por segundo, e há uma consulta muito pouco frequente como a terceira consulta de amostra, não faria sentido inchar as páginas no nível da folha do índice com o comando INCLUDE
colunas não chave. Tudo depende da sua carga de trabalho.
Se você entende estratégias prudentes de indexação e entende sua carga de trabalho comum, aplicando as duas opções, poderá encontrar o melhor caminho a seguir.