【发布时间】:2020-04-06 19:44:12
【问题描述】:
看起来非聚集索引搜索几乎要花掉所有的成本?虽然我对这种查询调优的黑暗艺术知之甚少,所以不确定。
我原来的查询是:
SELECT mxmservcallaudit.jobid,
mxmservcallaudit.dataareaid,
mxmservcallaudit.date AS maxdate,
UPPER(mxmservcallaudit.USERID) AS maxuser
FROM mxmservcallaudit
INNER JOIN (SELECT jobid, dataareaid, MAX(RECID) AS maxrecid
FROM mxmservcallaudit
WHERE type = 9 AND dataareaid = 'ansa'
GROUP BY dataareaid, jobid) AS statusdate1
ON mxmservcallaudit.DATAAREAID = statusdate1.DATAAREAID
AND MXMSERVCALLAUDIT.RECID = statusdate1.maxrecid;
目前查询计划在这里:
https://www.brentozar.com/pastetheplan/?id=Hys80JZAS
有什么我可以做的吗,或者这是最好的吗?
编辑:表结构为:
编辑:使用 RECOMPILE 我得到了一个类似的执行计划,除了 NESTED LOOP 现在消失了(这很好吗?):
【问题讨论】:
-
您能否共享 mxmservcallaudit 的表结构,特别是索引和唯一键约束。
-
您最后一次进行任何索引维护/统计更新是什么时候?
-
嗨@BarneyL 我已经按照建议添加了表格结构
-
索引维护在计划的 SQL 作业中定期完成@YannickLiekens
-
哇,考虑到您估计的 VS 实际行数,这肯定闻起来像参数嗅探。只是为了测试将 OPTION(RECOMPILE) 放在查询末尾,看看是否有不同的计划。
标签: sql performance tsql sql-server-2012