我有一个查询如下
SELECT ActivityId,
AnotherId,
PersonId,
StartTime AS MyAlias
FROM Activity
WHERE DeletedStatus='Active' AND
StartTime>='2018-02-01'AND StartTime<='2018-02-08'
正在使用的执行计划在这里
Index1 定义为:
CREATE NONCLUSTERED INDEX Index1 ON Activity
(
StartTime
)
索引 2 定义为:
CREATE CLUSTERED INDEX Index2 ON Activity
(
EndTime
StartTime
)
优化器在 Index1 上使用索引查找,然后使用键查找,因为 ActivityId、AnotherId、PersonId 在SELECT
列表中但不在索引中。这对我来说很有意义。
但是,以下事情让我感到困惑:
- 当 DeletedStatus 不在索引中但在
WHERE
子句中时,为什么优化器能够使用 Index1 进行索引查找? - 当 Index1 中不存在该列时,为什么 Index1 中的输出列表包含 EndTime?
- 当 Index2 中没有这些列时,如何使用 Index2 输出 ActivityId、AnotherId、PersonId?
抱歉,我已经对计划和查询进行了伪匿名,所以我希望我做得正确!