我试图优化以下查询。正在使用的两个子查询可以将其转换为单个查询。
select fn.id,
(select top 1 s.rid from find f join status s on f.fid = s.fid
where f.fid = fn.id and f.active = 1) as rid,
(select top 1 f.gid from find f
where f.fid = fn.id and f.active = 1) as gid
from finding fn where f.tid = 'abcd'
我已经将 CWE 用于连接子查询,因为它会在每次迭代中一遍又一遍地执行,但我想在这里询问一些 DBA 专家,对于以下要优化的查询,可能的最佳解决方案是什么。任何帮助是极大的赞赏。
最佳答案
使用 OUTER APPLY
SELECT fn.id,
oa.rid,
oa.gid
FROM finding fn
OUTER apply (SELECT TOP 1 s.rid,
f.gid
FROM find f
JOIN status s
ON f.fid = s.fid
WHERE f.fid = fn.id
AND f.active = 1) oa
WHERE f.tid = 'abcd'
注意: 你使用
TOP 1
而没有 Order by
你会在 result 中得到任意记录。关于sql - 如何优化以下查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39433603/