Вопрос в том, какие вопросы вы пытаетесь оптимизировать?
Эти два индекса очень разные. Первый индекс был бы полезен для такого запроса:
SELECT CaseId
FROM Rec.RecoveryDate
WHERE RecoveryTypeKey = 5
AND CurrentFlag = 1 -- or whatever
Первый индексирует столбцы в предложении WHERE. SQL Server сможет искать указанные RecoveryDateTypeKey и CurrentFlag. Поскольку CaseId INCLUDEd в узлах листа индекса, SQL Server не нужно будет присоединяться к таблице, чтобы получить его.
Используя тот же запрос, второй указатель будет вести себя по-разному. Если вам повезет, SQL Server будет искать все записи, где CurrentFlag равно 1. Затем он пересечет эти листовые узлы, которые ищут соответствующий RecoveryTypeKey. С другой стороны, если есть много записей, где CurrentFlag равен 1, SQL Server может вместо этого выполнить сканирование индекса.
Опять же, если вы желаете, чтобы оптимизировать запрос следующим образом:
SELECT CaseId, RecoveryTypeKey
FROM Rec.RecoveryDate
WHERE CurrentFlag = 1
Первый индекс был бы бесполезным, потому что CurrentFlag является второй столбец в индексе. SQL Server не смог бы найти его для CurrentFlag = 1, поэтому он, вероятно, выполнит сканирование индекса.
Спасибо за этот ответ! – Jaxidian