Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 再次使用交叉涂抹或外部涂抹从零件开始涂抹_Sql_Sql Server_Tsql_Optimization - Fatal编程技术网

Sql 再次使用交叉涂抹或外部涂抹从零件开始涂抹

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构造。我有过非常糟糕的经历。只需使用常规

4) 完成上述操作后,再次检查执行计划是否有任何缺少的索引。另外,使用STATISTICS TIME、IO on运行查询,以验证表的次数
引用的是正确的(有时执行计划将您置于错误的方向,特别是在涉及函数调用的情况下)。

由于第一个内部查询生成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