【发布时间】:2012-10-02 12:20:51
【问题描述】:
我在 SQL Server 上有一个大约 100 万行的表。 它有一个 ID (PK)、一个状态 (int) 和一个日期时间列。 我还在日期时间列上创建了一个索引。
现在我发现了一个我不明白的效果。
SELECT status
FROM table
WHERE dateTime BETWEEN '2010-01-01T00:00:00' AND '2010-01-02T12:00:00'
此语句返回 3664 行。它运行大约 150 毫秒,执行计划显示它正在使用键查找进行索引查找。
现在,如果我将其更改如下(只需将小时从 12 更改为 13):
SELECT status
FROM table
WHERE dateTime BETWEEN '2010-01-01T00:00:00' AND '2010-01-02T13:00:00'
此语句返回 3667 行。它运行了大约 600 毫秒,执行计划显示它使用主键!
我只是不明白。对于 3667 及更多行,它始终使用主键,即使查找速度更快。
有解释吗?
【问题讨论】:
-
尝试在日期时间字段的索引中包含
status列-我几乎可以保证这样做,查询优化器将使用该索引并且比执行聚集索引扫描时快得多。 ...
标签: sql indexing primary-key