是否可以在sql中用HS join替换NL join

Posted

技术标签:

【中文标题】是否可以在sql中用HS join替换NL join【英文标题】:Is it possible to replace NL join with HS join in sql 【发布时间】:2013-01-03 09:53:58 【问题描述】:

您好,我有一个非常大的查询,包括两个主表和 15 个子表。

ie, Main table say table_a join with some other 10 tables.
and another main table sat table_b join with some other 5 tables.

Table_a contains - 314988 rows and 
Table_b contains - 710989 rows.

当我们加入时,我可以找到许多 NL 加入和 HS 加入。

有趣的事实是所有HSjoin cost very less and NL join cost 非常非常高。

那么是否可以将连接从 NL 转换为 HS Join。

注意:它的所有索引.. 没有 TBSCAN 一切都是 IXSCAN。

【问题讨论】:

您的默认优化级别是多少?您的所有表和索引的统计信息都是最新的吗? 【参考方案1】:

您可以创建优化配置文件,在其中向优化器指示它应该使用哪些方法来访问给定查询的数据。

看看来自 DeveloperWorks 的这个教程:http://www.ibm.com/developerworks/data/library/techarticle/dm-1202storedprocedure/index.html

【讨论】:

应该非常谨慎地使用优化配置文件,并且只有在用尽所有其他可能性之后。 各位好朋友,感谢您的回答和指导。只是为了让我的问题更准确,“我在启动电子报告设计器中使用了一个查询,并且正在执行它的 .rox 文件。问题在于我在问题中有一个查询,所以是否可以替换 NL join with HS join 仅对查询进行一些更改?我们在 actuate 中执行此操作,并将在服务器控制台中部署 .rox .. 那么是否可以通过更改查询来进行更改?TIA ... @Ian 这个问题并没有说如何改进查询,它只是询问如何更改连接方法。确实可以通过重写查询、更改优化级别甚至机器中的配置来改进查询,但这不是问题所在。在 DB2 中更改连接方法的唯一方法是使用优化配置文件,其他选项有助于优化器,但它们不能确保在所有条件下都使用所需的连接方法。 @AngocA 你是对的——你确实回答了最初的问题。我只是添加了我的评论以提供一些警告。问“我怎样才能消除某种类型的连接”而不是“怎样才能让我的查询更好地工作”是一个常见的错误,因为它假设提出问题的人知道一种连接类型会比另一种更好 -根据我的经验,这种情况很少见。但是,我承认 OP 肯定有可能已经完成了分析并确定强制使用某种连接类型是唯一的解决方案。 @AProgrammer 影响 DB2 优化器的因素有很多:物理数据模型(表、索引)、表统计信息、数据存储方式的物理属性(即表中的数据集群的好坏) )。编写查询的方式也会影响查询计划,尽管 DB2 优化器内部的内部查询重写已经变得非常好,以至于很难通过重写查询来超越它)。

以上是关于是否可以在sql中用HS join替换NL join的主要内容,如果未能解决你的问题,请参考以下文章

Linux命令——nl

linux常用命令nl命令

每天一个Linux命令(11)--nl命令

nl 命令

linux每日命令(12):nl命令

Spark SQL join的三种实现方式