我使用的是 SQL Server 2008。
我需要您的建议来了解为什么这两个查询的时间相似(超过 200 万行,大约需要 52 秒):
查询 1:
DBCC DROPCLEANBUFFERS
DECLARE @curr INT
SET @curr = YEAR(GETDATE())
SELECT MAX([Date])
FROM DB_Item
WHERE YEAR([Date]) = @curr
查询 2:
DBCC DROPCLEANBUFFERS
SELECT MAX([Date])
FROM DB_Item
通过使用实际执行计划,我看到它使用聚集索引扫描
进行扫描。
那么,为什么会这样?我们是否有另一种方法可以快速获取一张表中 Date
的最大值?
非常感谢您的帮助。
谢谢。
最佳答案
对于第二个查询,您可以通过在日期列上添加索引来加快速度。
对于第一个查询,您需要进行两处更改。首先在日期列上创建索引,然后更改查询以使用 Between 而不是 equals 左侧的函数。搜索目标年份 1 月 1 日上午 12:00 至 12 月 31 日晚上 11:59:59 之间的日期。这样 SQL Server 就可以使用索引。
关于sql - 为什么这两个查询的时间相似(超过 200 万行大约需要 52 秒),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18326725/