我在 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 和更多的行,它总是使用主键,即使查找速度要快得多。
有解释吗?