У меня есть некластеризованный индекс в столбце datetime
(AdmitDate
) и столбец varchar
(Status
) в SQL Server. Теперь проблема в том, что я фильтрую результат только на основе столбца datetime
(без индекса в столбце AdmitDate
).Некластеризованный индексный указатель на составной столбец
Для того чтобы я использовал некластеризованный индекс, я использовал условие не null для столбца varchar
(Status
), но в этом случае в плане выполнения отображается «Сканирование индекса».
select ClientName, ID
from PatientVisit
where
(PatientVisit.AdmitDate between '2010-01-01 00:00:00.000' AND '2014-01-31 00:00:00.000')
AND PatientVisit.Status is not null
-- Index Scan
Но если я передаю конкретное значение статуса, то, как и ожидалось, в плане выплат отображается Index Seek.
select ClientName, ID
from PatientVisit
where
(PatientVisit.AdmitDate between '2010-01-01 00:00:00.000' AND '2014-01-31 00:00:00.000')
AND PatientVisit.Status = 'ADM'
--Index Seek
Должен ли я использовать в операторе и передать все возможные значения для Status
колонки использовать не-кластерный индекс?
Или есть ли другой способ использования индекса?
Спасибо,
Shubham
Вы указываете: * У меня есть кластерный указатель на столбце datetime (AdmitDate) * и: * Нет индекса в столбце AdmitDate *. Какое из двух истинно? –
Можете ли вы показать нам, как именно вы создаете этот индекс? Каков порядок столбцов в индексе? –
Также: я уверен, что индекс Index Seek находится на вашем фактическом некластеризованном индексе, тогда как «Index Scan» находится в кластерном индексе (например, сама таблица) - правильно? –