sql - 为什么这两个查询的时间相似(超过 200 万行大约需要 52 秒)

标签 sql sql-server sql-server-2008

我使用的是 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/

相关文章:

sql-server - 设置仅对特定用户可见的 SQL Server 数据库

sql-server - MS SQLServer 能否在两个集群之间建立数据库镜像

sql - 想要了解更多关于 NTILE() 的信息

SQL:实际行数差异

sql - sys.fn_dblog 的开始和结束 LSN 参数应该是什么格式?

sql 选择不同的 2 列对

mysql - 何时在 MySQL 中使用单引号、双引号和反引号

sql-server - 从 SQL Server 2008 Standard 升级到 Developer?

mysql - 将多个查询合并为一个

mysql - 计数(*)多个表