Então, eu estava lendo meu blog matinal e me deparei com este exercício divertido:
https://www.erikdarlingdata.com/sql-server/lets-design-an-index-together-part-3/
Aqui está a consulta em questão do artigo e o índice que ele propõe.
SELECT TOP (5000)
p.LastActivityDate,
p.PostTypeId,
p.Score,
p.ViewCount
FROM dbo.Posts AS p
WHERE p.PostTypeId = 1
AND p.LastActivityDate >= '20110101'
ORDER BY p.Score DESC;
CREATE INDEX whatever
ON dbo.Posts(PostTypeId, Score DESC, LastActivityDate)
INCLUDE(ViewCount) WITH (DROP_EXISTING = ON);
Muito divertido construir e indexar e tentar ajustá-lo de acordo. No entanto, eu estava anteriormente sob o possível mal-entendido de que a ordem da chave do índice é importante e que certas cláusulas WHERE podem não usar determinados índices quando a ordem da chave do índice não corresponde à consulta. Ou seja, minha falta de experiência com o cenário específico listado, meu pensamento assumido seria que essa consulta não usaria esse índice porque Score está no meio da definição da chave de índice, mas não na cláusula where da consulta.
As colunas ORDER BY são avaliadas quando o otimizador decide qual índice usar e, desde que as colunas da cláusula WHERE e as colunas ORDER by estejam na definição do índice, ele será usado?
Acho que minha pergunta é mais sobre como o otimizador avalia índices em relação às cláusulas WHERE e ORDER BY.