Sql 再次使用交叉涂抹或外部涂抹从零件开始涂抹
4) 完成上述操作后,再次检查执行计划是否有任何缺少的索引。另外,使用STATISTICS TIME、IO on运行查询,以验证表的次数Sql 再次使用交叉涂抹或外部涂抹从零件开始涂抹,sql,sql-server,tsql,optimization,Sql,Sql Server,Tsql,Optimization,4) 完成上述操作后,再次检查执行计划是否有任何缺少的索引。另外,使用STATISTICS TIME、IO on运行查询,以验证表的次数 引用的是正确的(有时执行计划将您置于错误的方向,特别是在涉及函数调用的情况下)。由于第一个内部查询生成ord=1的行,第二个内部查询生成ord=2的行,因此您应该使用UNION ALL而不是UNION。UNION将过滤掉相等的行,因为您永远不会得到相等的行,所以使用UNION ALL更有效 另外,重写查询以不使用WITH构造。我有过非常糟糕的经历。只需使用常规
引用的是正确的(有时执行计划将您置于错误的方向,特别是在涉及函数调用的情况下)。由于第一个内部查询生成ord=1的行,第二个内部查询生成ord=2的行,因此您应该使用UNION ALL而不是UNION。UNION将过滤掉相等的行,因为您永远不会得到相等的行,所以使用UNION ALL更有效
另外,重写查询以不使用WITH构造。我有过非常糟糕的经历。只需使用常规派生表即可。如果查询速度仍然异常缓慢,请尝试将某些派生表序列化为临时表,然后改为查询临时表。尝试通过删除
(SELECT dbo.Strconcat(osname)
FROM (SELECT TOP 10 osname
FROM incidentlocation l
JOIN organisationstructure o
ON l.locationid = o.osid
WHERE incidentid = i.incidentid
ORDER BY l.locorder) loc)
Location,
Isnull((SELECT TOP 1 teamleader
FROM incidentinvestigator
WHERE personid = 1588
AND tablename = 'AdminLevels'
AND incidentid = i.incidentid), 0)
TeamLeader
从菜单中选择。避免在select中使用复杂的函数/子查询 你认为大部分的努力都在联盟中,但是如果你告诉SSMS让你看一下结果,你就可以确定了。如果没有更多的信息,这类问题通常是不可能回答的。模式、索引和/或理想情况下显示问题的a将帮助我们。这是一个很好的查询。理想情况下,您应该制作一个与您的情况类似的简单示例,并将其放在此处,而不是给我们整个查询。尝试了UNION ALL而不是UNION,并用OUTER APPLY替换了LEFT EXTER JOIN-似乎花费了相同的时间。您能否建议修改查询?如何将select从select移动到from?请提供重写查询的执行计划。您能否分享一个cte(“WITH construct”)的执行效率低于派生表?@Lmu92此处没有足够的空间提供示例。我遇到的问题通常是复杂的CTE,并导致大量行。在某些情况下,至少对于性能较差的SQL05和SQL08,优化器会失败并重新生成CTE(或视图)多次。建议将此CTE(或视图)“物化”为临时表,然后改为查询临时表。存在其他技巧(选择TOP 2147483647…),但我不太喜欢。有关更多上下文,请在web上查找“sql server物化CTE”。
(SELECT dbo.Strconcat(osname)
FROM (SELECT TOP 10 osname
FROM incidentlocation l
JOIN organisationstructure o
ON l.locationid = o.osid
WHERE incidentid = i.incidentid
ORDER BY l.locorder) loc)
Location,
Isnull((SELECT TOP 1 teamleader
FROM incidentinvestigator
WHERE personid = 1588
AND tablename = 'AdminLevels'
AND incidentid = i.incidentid), 0)
TeamLeader