我在 SQL Server的datetime
列 ( AdmitDate
) 和varchar
列 ( )上有一个非聚集索引。Status
现在的问题是我仅根据datetime
列过滤结果(仅在列上没有索引AdmitDate
)。
为了让我利用非聚集索引,我对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
我应该使用 in 运算符并传递列的所有可能值Status
以利用非聚集索引吗?
或者有没有其他方法可以利用索引?
谢谢,
舒巴姆