Ваш запрос ссылки четыре столбцы:
- symbolID
- vTrdBuy
- TypeID
- barDateTime
Хотя кластерный индекс охватывает только три из них
- symbolID
- vTrdBuy
- TypeID
- barDateTime
Причина, по которой SQL Server игнорирует этот индекс, заключается в том, что он бесполезен для него. Индекс сначала сортируется по symbolID
, и вам нужен не конкретный идентификатор символа, а набор случайных значений. Это означает, что он должен читать по всей таблице.
Следующий столбец в кластерном индексе - vTrdBuy
. Это не используется, чтобы помочь ему перейти к нужным строкам.
Глядя на запрос, два столбца очень ограничивают количество строк, которые вы хотите вернуть:
WHERE typeID = 1
AND barDateTime = 44991
Создание индекса, начинающегося с typeID и barDateTime , действительно может помочь SQL Server перейти к строкам, которые интересуют.
Первый SQL Server может перейти прямо к строкам, которые
typeID = 1.
Оказавшись там, он может прыгать прямо к барам, где
barDateTime = March 8, 2023
Это может быть сделано путем поиска по индексу, так как индекс упорядочен по столбцам в нем. Это очень быстро и исключает просмотр большинства строк.
Если вы создали индекс:
(
typeID
barDateTime
symbolID
)
все равно может оказаться бесполезным, если запрос возвращает много строк. Чтобы завершить оператор SELECT, SQL Server по-прежнему необходимо значение vTrdBuy . Это необходимо сделать, перепрыгивая таблицу для каждой строк, соответствующих критериям (называемых Поиск закладок ). Если строк слишком много (скажем,> 500), SQL Server просто забудет индекс и просто просканирует всю таблицу - потому что это будет быстрее.
Вы хотите запретить поиск по закладке, не позволяя ей возвращаться в таблицу для пропущенного значения, вы хотите включить значение в индекс:
CREATE INDEX IX_mvTrdHidUhd_FancyCovering ON mvTrdHidUhd
(
typeID, barDateTime, symbolID, vTrdBuy
)
Теперь у вас есть индекс, который содержит все, что хочет SQL Server, в том порядке, в котором он хочет, и вам не нужно связываться с физическим порядком сортировки (то есть кластеризацией) физической таблицы.