sql-server - 如何找到 'No Join Predicate' 的来源

标签 sql-server tsql sql-server-2008

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

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

我对此的另一个注意事项是查询在 where 子句中包含此内容:

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

如果你只在那里放一个基金代码,它运行良好 - 所以以某种方式添加第二个代码会使我们的事情变得笛卡尔(也许,这就是没有连接谓词会发生的情况)。

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

解释计划能否指向特定领域?

谢谢你的协助。

编辑:

无法发布查询,安全性的东西,而且混淆起来太大了。我不想让任何人看到它。

最佳答案

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

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

然后就可以在mssql server中使用plan的图形化 View 了;这将解释一切。

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

关于sql-server - 如何找到 'No Join Predicate' 的来源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7744628/

相关文章:

sql - 如何在 SQL 中以特定日期格式预览日期 - 60 天?

sql - 如何在 SQL 中将 json 属性从一个记录值移至新记录值

sql-server - 全文搜索查询在 SQL Server 中不返回结果

c# - 存储过程参数仅返回第一个字符

sql - 如何查找哪些列没有任何数据(所有值均为 NULL)?

sql-server - 使用 NOT EXISTS 过滤查询

sql - 为什么使用变量时SQL Server变慢?

tsql - SQL_Latin1_General_CP1_CI_AS和SQL_Latin1_General_CP1_CI_AI有什么区别

sql-server - 当增加大表上 VARCHAR 列的大小时会出现任何问题吗?

sql-server - 在 SQL Server 2008 中使用 ADO 时出现 "Multiple-step operation generated errors. Check each status value."错误