Да, SQL-сервер может выполнить операцию поиска по индексу (D, C, B, A)
для следующих запросов:
WHERE D = 'd'
WHERE D = 'd' AND C = 'c'
WHERE D = 'd' AND C = 'c' AND B = 'b'
WHERE D = 'd' AND C = 'c' AND B = 'b' AND A = 'a'
И он может выполнить операцию сканирования указанного индекса для этих:
WHERE C = 'c' AND B = 'b'
WHERE A = 'a'
-- etc
Но нужно учитывать еще одну вещь: порядок столбцов внутри индексов имеет значение. Два индекса (D, C, B, A)
и (B, C, D, A)
могут работать по-разному. Рассмотрим следующий пример:
WHERE Active = 1 AND Type = 2 AND Date = '2019-09-10'
Если предположить, что данные содержат два различных значения для Active, 10 для Type и 1000 для Date, индекс для (Date, Type, Active, Other)
будет более эффективным, чем (Active, Type, Date, Other)
.
Вы также можете рассмотреть возможность создания разных вариаций указанного индекса для разных запросов.
PS: если столбец A
не используется внутри предложения WHERE, тогда вы можете просто INCLUDE
it.