You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server中YEAR函数是否仍非SARGable?2014年后有无版本变化?

SQL Server 2014后YEAR()函数查询的SARGable特性变化

在SQL Server 2014至2019版本中,WHERE YEAR(orderdate) = 2014这类对索引列直接使用函数的写法依然是非SARGable的:优化器无法直接利用orderdate上的聚集索引执行高效的范围扫描,只能被迫进行索引扫描或全表扫描,性能远不如手动写成范围条件的查询。

这种情况在SQL Server 2022版本发生了改变:SQL Server 2022的智能查询处理(IQP)新增了日期函数的自动转换优化,当数据库兼容性级别设置为160(2022默认级别)且相关优化特性启用时,优化器会自动将YEAR(orderdate) = 2014重写为等价的范围条件orderdate >= '20140101' AND orderdate < '20150101',从而能够利用索引进行高效的范围扫描。

不过需要注意:

  • 该优化依赖特定版本和兼容性设置,并非所有环境都能生效;
  • 手动编写范围条件的写法在所有SQL Server版本中都能稳定保证SARGable,是更稳妥的选择。

示例代码

非SARGable写法(2022之前无法高效利用索引):

SELECT orderid, orderdate, filler
FROM dbo.Orders
WHERE YEAR(orderdate) = 2014;

推荐的SARGable写法(全版本通用):

SELECT orderid, orderdate, filler
FROM dbo.Orders
WHERE orderdate >= '20140101'
AND orderdate < '20150101';

内容的提问来源于stack exchange,提问作者J. Mini

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 21:30:05