【发布时间】:2020-12-17 04:57:15
【问题描述】:
我需要有关以下查询的查询优化方面的帮助。
SELECT pr.todate , pr.descr, cmp.company_id
FROM employee AS emp
INNER JOIN company AS cmp ON emp.emp_comp_id = cmp.company_id
INNER JOIN profile AS pr ON emp.acca_id = pr.profile_id
INNER JOIN acondition ON as_id = as_ac_id
WHERE as_closed = 0
AND (pr.ac_act_id = 20)
AND (pr.todate = (SELECT MIN(todate) AS Expr1
FROM profile pro
INNER JOIN employee empl ON empl.acca_id = pro.profile_id
JOIN acondition ON as_id = as_ac_id
WHERE (pro.ac_act_id = 20
AND empl.emp_comp_id = cmp.company_id)
AND as_closed = 0))
由于主查询和子查询有重复的join,有什么办法可以去掉子查询中的join?
【问题讨论】:
-
我们需要更多信息来帮助您……例如执行计划、表定义和表上的索引。是什么让您认为它可以优化?
-
嗨,
employee,company,profile有nonclustered索引,acondition有clustered索引。有什么办法可以减少子查询中的内连接? -
edit 请进入问题并使用粘贴计划来发布您的执行计划。为什么要删除连接?您的查询似乎完全合理。
-
有点慢,所以我需要优化这个查询。出于安全原因,我在这里使用了虚拟表,所以我可能无法共享执行计划
-
@the_coder_guy ,老实说,StackOverflow 并不是寻求查询调优建议的最佳场所。这需要与您进行大量的来回交流,并且还涉及很多事情。您最好的选择是查看 SQL Server 社区 slack 频道:
dbatools.io/slack
标签: sql sql-server tsql query-optimization