Estamos executando o SQL Server 2008. Ao examinar os resultados de uma consulta que executei nas exibições sys.dm_db_missing_index_*, vejo uma sugestão curiosa para uma coluna incluída. Tenho as duas tabelas a seguir:
create table foo (
id int not null identity(1,1) primary key
/* many more fields, not relevant to question */
)
create table bar (
id int not null identity(1,1) primary key
foo_id int not null,
param_name nvarchar(50),
param_value nvarchar(255)
)
A tabela foo tem uma relação 1:M com bar; bar é usado para armazenar miscelânea associada a alguns dos registros em foo.
Voltar para a consulta sys.dm_db_missing_index_*. Várias vezes ao dia, o otimizador procura um índice na barra com foo_id em equal_columns e id em included_columns. Minha pergunta é: qual é o objetivo de incluir a chave de índice clusterizado da tabela em um índice não clusterizado? Como o nível folha do índice não clusterizado inclui o valor da chave do índice clusterizado de qualquer maneira, não é redundante incluir a chave do índice clusterizado em um índice não clusterizado?
EDIT: O único índice existente na barra é o índice clusterizado com o PK como chave.
Desde já, obrigado.
Sim, é redundante.
Por outro lado, não vai prejudicar nada (já que o otimizador irá ignorá-lo e não adicionar os dados duas vezes).
Esta é uma das muitas razões para não aceitar os índices sugeridos pelo valor de face.