Depois de executar uma consulta bastante pesada, o plano de execução me deu uma sugestão de índice ausente que era da forma:
(Timestamp) INCLUDE (CustomerID, EventID, ID, EmployeeID)
O que parece ser um índice de cobertura (a coluna INCLUDE são todas chaves primárias (ID) ou chaves estrangeiras). No entanto, minha cláusula WHERE de consultas está filtrando por timestamp, CustomerID e EventID. Não sei por que eles não foram incluídos na parte principal do índice.
Portanto, minha pergunta é: há alguma diferença em usar o índice sugerido acima ou qual é a melhor alternativa;
(Timestamp, CustomerID, EventID) INCLUDE (ID, EmployeeID)
Meu entendimento é que isso ainda permitirá a busca de índice somente de carimbo de data/hora, mas também ajudará ainda mais minha consulta por ter os IDs do cliente e do evento (que são filtrados) na parte principal.
Acho que isso tem algo a ver com a largura da parte 'principal' - FYI, timestamp é um datetime2 (0), CustomerID é um int e EventID é um byte.
Estou testando isso sozinho no momento, mas esta é uma tabela ENORME - mais de 1.000.000.000 de linhas - e está demorando para comparar os índices. Isso, e eu gostaria de aprender mais sobre isso.
Obrigado.