Sql server 如何找到';无连接谓词';

Sql server 如何找到';无连接谓词';,sql-server,tsql,sql-server-2008,Sql Server,Tsql,Sql Server 2008,我得到了一个由business objects web intelligence针对预算系统的SQL server数据库生成的海量查询。报表开发人员在GUI中创建了此查询,并发现它从未完成。我昨晚让它运行了7个小时,然后我们的服务器重新启动进行windows更新 我查看了sql中的解释计划,发现在几个嵌套循环(内部连接)步骤中出现了一些警告,其中两个警告出现在第三步到最后一步。警告为“无连接谓词” 我在这方面的另一个注意事项是,查询在where子句中包含以下内容: BF_FUND.CD IN

我得到了一个由business objects web intelligence针对预算系统的SQL server数据库生成的海量查询。报表开发人员在GUI中创建了此查询,并发现它从未完成。我昨晚让它运行了7个小时,然后我们的服务器重新启动进行windows更新

我查看了sql中的解释计划,发现在几个嵌套循环(内部连接)步骤中出现了一些警告,其中两个警告出现在第三步到最后一步。警告为“无连接谓词”

我在这方面的另一个注意事项是,查询在where子句中包含以下内容:

 BF_FUND.CD  IN  ('0105','0101')
如果你只把一个基金代码放在那里,它运行得很好——所以不知何故,添加第二个代码会让事情变得笛卡尔式(也许,这就是没有连接谓词的情况)

有没有关于如何追踪的建议?790行精彩的SQL代码,只需一个接一个地连接即可

解释计划能否指向特定区域

谢谢你的帮助


编辑:


无法发布查询,安全问题,而且它太大,难以混淆。我不想让任何人看到它。

使用在线SQL格式化程序来明确SQL连接;然后逐块分割查询以调试问题

然后可以在mssql服务器中使用平面图的图形视图;这可以解释一切

注意:如果您的查询由于嵌套循环连接而没有连接谓词,因此执行得很差,那么不一定是查询中缺少连接条件。
检查

2-确保使用显式的
JOIN
语法(
LEFT JOIN x on x.y=z.y
),而不是隐式的synax(
FROM x,z
),执行计划会告诉您相关的表,因此很难找到它们?是否使用隐式
JOIN
语法编写?很遗憾,无法发布查询。因此,您建议将警告追溯到其第一次出现并查看这些表?这有点令人困惑,“输出列表”在第一步显示了8个以上的表格。这并不是说什么两个对象被连接在一起-也许我需要在计划中看得更远。我有这个问题,我的问题是SQL中的错误类型,我不小心将一个表连接到了它自己,例如:左连接x on x.y=x.y(而不是x.y=z.y),感谢第二个链接-这可能就是发生的情况。