为什么这两个查询获得相似的时间(超过2百万行,大约52秒)

Lan*_*ang 3 sql sql-server sql-server-2008

我正在使用SQL Server 2008.

我需要你的建议,为什么这两个查询得到相似的时间(超过2百万行约52秒):

查询1:

DBCC DROPCLEANBUFFERS

DECLARE @curr INT
SET @curr = YEAR(GETDATE())

SELECT MAX([Date])
FROM DB_Item
WHERE YEAR([Date]) = @curr
Run Code Online (Sandbox Code Playgroud)

查询2:

DBCC DROPCLEANBUFFERS

SELECT MAX([Date])
FROM DB_Item
Run Code Online (Sandbox Code Playgroud)

使用实际执行计划,我看到它扫描Clustered Index scan.

那么,为什么我们有另一种方法可以Date迅速在1个表中获得最大值?

非常感谢您的帮助.

谢谢.

Sam*_*eff 6

对于第二个查询,您可以通过在日期列上添加索引来加快速度.

对于第一个查询,您需要进行两项更改.首先在日期列上创建一个索引,然后将查询更改为使用between而不是equals左侧的函数.搜索目标年份的1月1日凌晨12:00至12月31日晚上11:59:59之间的日期.这样SQL Server就可以使用索引.

  • 默认扫描策略是使用聚簇索引进行扫描.但这实际上并不意味着正在提供索引优势.确保您有一个索引,群集或非群集,它位于您请求最大值的同一列上(这称为覆盖索引) (2认同)