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列运算同样的哈希函数计算得到的结果进行探测,最终连接得出符合条件的记录。
- ››oracle 中 UPDATE nowait 的使用方法
- ››Oracle ORA-12560解决方法
- ››Oracle 10g RAC 常用维护命令
- ››Oracle如何在ASM中定位文件的分布
- ››Oracle的DBMS_RANDOM.STRING 的用法
- ››oracle 外部表导入时间日期类型数据,多字段导入
- ››Oracle中查找重复记录
- ››oracle修改用户登录密码
- ››Oracle创建删除用户、角色、表空间、导入导出等命...
- ››Oracle中登陆时报ORA-28000: the account is lock...
- ››Oracle数据库在配置文件中更改最大连接数
- ››Oracle中在pl/sql developer修改表的两种方式
更多精彩
赞助商链接