表连接概念
Hash join 它的连接方式﹐Oracle将第一个表加加载内存﹐使用一种Hash技 朮﹐连接第二个表. 显然驱动表应该选择两者中的较小者。 因为CBO总是倾向于把HASH连接放在次要地位﹐我们可以用
USE_HASH提示﹐强制优化器使用HASH连接方式。由于HASH算 法的使用﹐索引的存在对性能的影响不是很大。
Nested loop
即嵌套循环连接﹐是一种是最基本的表连接方式﹐在嵌套循环 中﹐首先从驱动表读取记录﹐然后把结果集与第二个表进行比较 连接﹐如图所示,这一切都是通过索引来进行的﹐如果没有索引﹐ 连接成本会大大地增加。 在考虑连接顺序时﹐应该把最小的表作为驱动表。 在内部表上建有可用的索引的时候﹐应该首先考虑使用Nested Loop。
Sort merge join 它不使用索引﹐它用全表扫描获得两个数据集合﹐然后将它们 分别排序后﹐合并成为一个最终的结果集。 注意到排序合并连接中并没有使用索引是非常重要的。在大多数 情况下﹐通过索引访问更快一些﹐但是当连接表中需要有大量资料 的处理和返回﹐大量的全表扫描﹐或者表上没有建立索引的话﹐可 以考虑使用Sort merge join。
* 表连接优化实例
曾经在一个ERP维护中遇到过这样一个典型问题﹐有一个比较 复杂的SQL﹐其中由多个关联了十几个大表的视图JOIN而成﹐咝?一次花几个小时的时间。后来经过仔细观察执行计划﹐发现优化器 在处理上述的几个大的结果集关联的时候﹐使用的是嵌套循环。众 所周知﹐嵌套循环需要用到索引﹐否则效率会很低﹐而几个数据集 关联时是不可能有索引的﹐咝屑竞
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12058779/viewspace-1018018/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/12058779/viewspace-1018018/