WEB开发网
开发学院数据库Oracle Oracle中表的连接及其调整 阅读

Oracle中表的连接及其调整

 2007-05-08 12:09:37 来源:WEB开发网   
核心提示: 排序合并连接在数据表预先排序好的情况下效率是非常高的,也比较适用于非等值连接的情况,Oracle中表的连接及其调整(5),比如>、>=、<=等情况下的连接(哈希连接只适用于等值连接),由于Oracle中排序操作的开销是非常消耗资源的,对列deptno运算哈希函数构建一张哈

排序合并连接在数据表预先排序好的情况下效率是非常高的,也比较适用于非等值连接的情况,比如>、>=、<=等情况下的连接(哈希连接只适用于等值连接)。由于Oracle中排序操作的开销是非常消耗资源的,当结果集很大时排序合并连接的性能很差,于是Oracle在7.3之后推出了新的连接方式——哈希连接。

三、哈希连接(Hash join)

哈希连接分为两个阶段,如下。

1、构建阶段:优化器首先选择一张小表做为驱动表,运用哈希函数对连接列进行计算产生一张哈希表。通常这个步骤是在内存(hash_area_size)里面进行的,因此运算很快。

2、探测阶段:优化器对被驱动表的连接列运用同样的哈希函数计算得到的结果与前面形成的哈希表进行探测返回符合条件的记录。这个阶段中如果被驱动表的连接列的值没有与驱动表连接列的值相等的话,那么这些记录将会被丢弃而不进行探测。关于哈希连接更深层次的原理可以参考Itpub上网友logzgh发表的“hash join算法原理”帖子(http://www.itpub.net/showthread.php?threadid=315494)。

以下为哈希连接的一个例子:

Roby@XUE> select /**//*+ use_hash(emp,dept) */ emp.ename,dept.dname
2 from emp,dept
3 where emp.deptno=dept.deptno;
ENAME   DNAME
---------- --------------
WARD    SALES
JONES   RESEARCH
MARTIN   SALES
BLAKE   SALES
CLARK   ACCOUNTING
SCOTT   RESEARCH
KING    ACCOUNTING
TURNER   SALES
ADAMS   RESEARCH
JAMES   SALES
FORD    RESEARCH
MILLER   ACCOUNTING
12 rows selected.
Execution Plan
---------------------------------------------------------------------------
| Id | Operation     | Name | Rows | Bytes | Cost (%CPU)| Time   |
---------------------------------------------------------------------------
|  0 | SELECT STATEMENT  |   |  12 |  264 |   7 (15)| 00:00:01 |
|* 1 | HASH JOIN     |   |  12 |  264 |   7 (15)| 00:00:01 |
|  2 |  TABLE ACCESS FULL| DEPT |   4 |  52 |   3  (0)| 00:00:01 |
|* 3 |  TABLE ACCESS FULL| EMP |  12 |  108 |   3  (0)| 00:00:01 |

在这个查询中优化器首先选择dept这张表为驱动表,对列deptno运算哈希函数构建一张哈希表,然后再对被驱动表emp的deptno列运算同样的哈希函数计算得到的结果进行探测,最终连接得出符合条件的记录。

上一页  1 2 3 4 5 6  下一页

Tags:Oracle 中表 连接

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接