【发布时间】:2016-06-27 16:05:44
【问题描述】:
我正在努力提高运行缓慢的 SQL 存储过程的性能。
通常我会尝试优化查询使用的执行计划。我的问题涉及以下 SQL 的 sn-p;这个 SQL 是否可搜索,特别是 Max 函数?
SELECT MAX(Audit_Date) AS DATE,
FK_RegisterID
FROM dbo.[Audit Result Entry Detail]
INNER
JOIN dbo.[Audit Register]
ON dbo.[Audit Result Entry Detail].FK_RegisterID = dbo.[Audit Register].PK_ID
WHERE ((SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, Audit_Date))) >= @StartDate
AND (SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, Audit_Date))) <= @EndDate)
AND part_number IN (@ParticipantNumber)
GROUP
BY FK_RegisterID
任何帮助将不胜感激。
【问题讨论】:
-
Sargable 适用于过滤器。例如
WHERE子句,在您的情况下是不可分割的。不是聚合。 -
我将首先将您的
WHERE子句更改为Audit_Date >= @StartDate AND Audit_Date < DATEADD(dd,1,@EndDate)之类的内容,这样您就可以从Audit_Date上的索引或Audit_date, part_number上的复合索引中受益。 -
您可以在
DATEADD附近丢失内部Select- 没有必要,如果您使用的是 SQL Management Studio,那么我建议您使用 Include Actual Execution Plan from 查询菜单。这将为您提供很好的信息来修改您的查询并显示您是否缺少索引。
标签: sql sql-server performance optimization