Plano de execução mostrando claramente que uma das minhas tabelas usadas na consulta está usando o Clustered Index Scan. A partir deste nó, como posso adivinhar quais colunas devem fazer parte da minha chave de índice não clusterizada e quais colunas devo usar na lista de inclusão. Estou usando o SQL Server 2008/R2
relate perguntas
-
SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado
-
Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?
-
Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?
-
Quais são as principais causas de deadlocks e podem ser evitadas?
-
Como determinar se um Índice é necessário ou necessário
No interesse de mostrar um exemplo generalizado até vermos seu DDL e consulta específicos, considere o seguinte como um exemplo básico:
Portanto, temos uma tabela de teste, SomeTable , com um índice clusterizado. Execute a consulta abaixo:
Isso causa um Clustered Index Scan, como você está vendo:
Assim, analisando a consulta, temos a coluna AnotherInt que está na
WHERE
cláusula e está sendo pesquisada. Também estamos recuperando a coluna SomeData , portanto, para evitar uma pesquisa de chave no índice clusterizado (ou o otimizador pode até mesmo usar uma varredura de índice clusterizado novamente), teremos SomeData como umaINCLUDE
coluna:Agora, executando a mesma consulta acima:
O SQL Server utilizará esse índice não clusterizado para retornar os dados. É um índice de cobertura, porque não precisará fazer uma pesquisa no índice clusterizado para os dados restantes:
Através da criação de um NCI prudente, agora eliminamos o CI Scan em vez de um Index Seek.