ITPub博客

首页 > Linux操作系统 > Linux操作系统 > hash join / nest loop join / sort merge join

hash join / nest loop join / sort merge join

原创 Linux操作系统 作者:janny_yu 时间:2012-03-06 10:42:52 0 删除 编辑
hash join :  用在两个表数据量差别比较大的时候
nest loop join :  一般用在连接的表中有索引,并且索引选择性较好的时候
merge join: 用在没有索引,而且数据已经排好序的时候


Hash join
步骤:将两个表中较小的一个在内存中构造一个HASH表(对JOIN KEY),扫描另一个表,同样对JOIN KEY进行HASH后探测是否可以JOIN。适用于记录集比较大的情况。需要注意的是:如果HASH表太大,无法一次构造在内存中,则分成若干个partition,写入磁盘的temporary segment,则会多一个写的代价,会降低效率。

cost = (outer access cost * # of hash partitions) + inner access cost
--------------------------------------------------------------------------
| Id  | Operation            |  Name        | Rows  | Bytes | Cost (%CPU)|
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT     |              |   665 | 13300 |     8  (25)|
|   1 |  HASH JOIN           |              |   665 | 13300 |     8  (25)|
|   2 |   TABLE ACCESS FULL  | ORDERS       |   105 |   840 |     4  (25)|
|   3 |   TABLE ACCESS FULL  | ORDER_ITEMS  |   665 |  7980 |     4  (25)|
--------------------------------------------------------------------------

ORDERS为HASH TABLE,ORDER_ITEMS扫描  

Nested loop join:
步骤:确定一个驱动表(outer table),另一个表为inner table,驱动表中的每一行与inner表中的相应记录JOIN。类似一个嵌套的循环。适用于驱动表的记录集比较小(<10000)而且inner表需要有有效的访问方法(Index)。需要注意的是:JOIN的顺序很重要,驱动表的记录集一定要小,返回结果集的响应时间是最快的。

cost  = outer access cost + (inner access cost * outer cardinality)


|   2 |   NESTED LOOPS                |              |     3 |   141 |     7  (15)|
|   3 |    TABLE ACCESS FULL          | EMPLOYEES    |     3 |    60 |     4  (25)|
|   4 |    TABLE ACCESS BY INDEX ROWID| JOBS         |    19 |   513 |     2  (50)|
|   5 |     INDEX UNIQUE SCAN         | JOB_ID_PK    |     1 |       |            |


EMPLOYEES为outer table, JOBS为inner table.

Sort merge join
步骤:将两个表排序,然后将两个表合并。通常情况下,只有在以下情况发生时,才会使用此种JOIN方式:

1.RBO模式

2.不等价关联(>,<,>=,<=,<>)

3.HASH_JOIN_ENABLED=false

4.数据源已排序

cost = (outer access cost * # of hash partitions) + inner access cost

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26022000/viewspace-717815/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2012-03-05

  • 博文量
    7
  • 访问量
    4009