Sam*_*Sam 11 t-sql sql-server sql-server-2008
对于预算系统,业务对象Web智能针对SQL服务器数据库生成了一个可笑的大量查询.报表开发人员已在GUI中创建此查询,并发现它永远不会完成.我让它在昨晚运行,并且在我们的服务器重新启动以进行Windows更新之前它运行了7个小时.
我看了一下sql中的解释计划,并在几个'嵌套循环(内部联接)步骤中发现了一些警告 - 其中两个警告费用从第3步到最后一步.警告是"No Join Predicate".
我对此的另一个注意是查询在where子句中包含这个:
BF_FUND.CD IN ('0105','0101')
Run Code Online (Sandbox Code Playgroud)
如果你只把一个基金代码放在那里,它运行正常 - 所以不知何故添加第二个代码就是让事情变成我们的笛卡尔(也许,这就是没有连接谓词会发生的事情).
有关如何追踪此问题的任何建议?790行精彩的SQL浏览,加入后只需加入.
解释计划可以指向特定区域吗?
谢谢你的协助.
编辑:
无法发布查询,安全性的东西,它很大,以便混淆.而且我不想让任何人看到它.
使用在线 SQL 格式化程序来清晰地了解 SQL 连接;然后将查询逐块拆分以调试问题。
http://www.dpriver.com/pp/sqlformat.htm
然后您可以在mssql server中使用计划的图形视图;这就能解释一切。
PS:如果由于没有连接谓词的嵌套循环连接而导致查询性能不佳,则不一定是您在查询中缺少连接条件。检查http://sqlserverselect.blogspot.com/2010/10/nested-loops-join-no-join-predicate.html