我的查询需要在某些列上是动态的,这意味着我得到一个参数并根据它的值决定在 Where 子句中获取哪一列。我已经使用“CASE”表达式实现了这个请求:
(CASE @isArrivalTime WHEN 1 THEN ArrivalTime ELSE PickedupTime END)
>= DATEADD(mi, -@TZOffsetInMins, @sTime)
AND (CASE @isArrivalTime WHEN 1 THEN ArrivalTime ELSE PickedupTime END)
< DATEADD(mi, -@TZOffsetInMins, @fTime)
如果@isArrivalTime = 1然后选择ArrivalTime列,则选择PickedupTime列。我有一个聚集索引ArrivalTime和非聚集索引PickedupTime。
我注意到,当我使用此查询(使用@isArrivalTime = 1)时,与仅使用ArrivalTime.
也许查询优化器不能以这种方式正确使用\选择索引?
我比较了执行计划并注意到,当我使用CASE32% 的时间被浪费在索引扫描上时,但是当我没有使用 CASE (just usedArrivalTime`) 时,只有 3% 的时间被浪费在了索引扫描上。
有谁知道这是什么原因?