如何找到'无加盟谓词'的来源

时间:2011-10-12 18:20:07

标签: sql-server tsql sql-server-2008

对于预算系统,业务对象Web Intelligence针对SQL Server数据库生成了一个非常大量的查询。报表开发人员已在GUI中创建此查询,并发现它永远不会完成。我让它在昨晚运行,并且在我们的服务器重新启动以进行Windows更新之前它运行了7个小时。

我看了一下sql中的解释计划,并在几个'嵌套循环(内部联接)步骤中发现了一些警告 - 其中两个警告费用从第3步到最后一步。警告是“No Join Predicate”。

我对此的另一个注意是查询在where子句中包含了这个:

 BF_FUND.CD  IN  ('0105','0101')

如果你只在那里放了一个基金代码,它运行正常 - 所以不知何故添加第二个代码就是让事情变成我们的笛卡尔(也许,这就是没有连接谓词会发生的事情)。

有关如何跟踪此问题的任何建议? 790行精彩的SQL浏览,加入后只需加入。

解释计划可以指向特定区域吗?

感谢您的协助。


编辑:

无法发布查询,安全性事情,并且很难对其进行混淆。而且我不想让任何人看到它。

1 个答案:

答案 0 :(得分:4)

使用在线SQL格式化程序来清楚SQL连接;然后逐块拆分查询以调试问题。

http://www.dpriver.com/pp/sqlformat.htm

然后你可以在mssql server中使用plan的图形视图;这将解释一切。

P.S:如果由于嵌套循环连接而没有连接谓词而导致查询性能不佳,则不一定是您在查询中缺少连接条件的情况。 查看http://sqlserverselect.blogspot.com/2010/10/nested-loops-join-no-join-predicate.html