在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

oracle hash join原理及注意事项有哪些

147次阅读
没有评论

共计 2279 个字符,预计需要花费 6 分钟才能阅读完成。

oracle hash join 原理及注意事项有哪些,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

7.3 引入,仅用于 CBO 和等值连接,隐含参数_hash_join_enabled 默认 true,即使为 false 也可被 use_hash 覆盖;
Oracle 依据 hash_area_size/db_block_size/_hash_multiblock_io_count 决定 hash partition 数量,hash 表由若干 hash partition 组成,而每个 partition 都包含多个 hash bucket

表 small 和 big,前者会被选为驱动表,假定其结果集为 s,后者为 b;
构造驱动表
1 遍历 s,对其每条记录按照连接列做 hash 运算;使用 2 个 hash 函数,暂称为 func_1/func_2,其 hash 值为 value1 和 value2;
2 按照 value1 分配 bucket,把 s 和 value2 存入其中;只需查询列 / 连接列即可,不需要整行记录;构造 hash partition 时每个分区对应 1 个 bitmap,标注该分区所属 bucket 是否有记录;
3 如果 s hash_area_size,将包含记录最多的 partition 存入 temp,反复直至完成;
4 按记录数对 hash partition 排序,当 s hash_area_size,则尽量将较小的 partition 保留内存中;
构造被驱动表
5 遍历 b,处理方式与步骤 1 一样;
6 按照 value1 匹配 s 的 bucket,然后遍历其所有记录,并校验连接列是否相等;如果成功则返回记录;如果没有在内存中找到 bucket,首先访问 bitmap,若其记录数 0,暂将 b 中对应记录写入 temp,若 = 0 则直接跳过,即位图过滤;反复直至完成所有位于内存中的 s 和 b 的记录;
7 处理 temp 中的 si 和 bj,分区号相等的结成对 sn/bn,记录数较少的作驱动表,以 value2 构造 hash table;反复直至完成

注意事项
1 驱动表连接列的选择性要高,若一个 bucket 的记录数过多,遍历时会严重消耗 CPU 且逻辑读不高(位于 PGA 中),可参照 http://www.dbafan.com/blog/?p=151
2 驱动表应尽可能小,最好可全部装入内存 hash_area_size

10104 事件
跟踪 hash join,记录 hash partition/bucket 以及每个 bucket 多少条记录

Hint
use_hash(table_1 table_2) 与 use_hash(table_1) + use_hash(table_2)等价,即并不决定连接顺序;
no_swap_join_inputs(rowsource_alias)和 swap_join_inputs(rowsource_alias) 可指定驱动表和被驱动表,后者不可 swap;

select  /*+ leading(table_1 table_2) use_hash(table_2) no_swap_join_inputs(table_2) */ *
from  t1 table_1, t2 table_2
where  table_1.n1 = table_1.n1;
———————————————————–
| Id  | Operation  | Name | Rows  | Bytes | Cost  |
———————————————————–
|  0 | SELECT STATEMENT  |  | 45000 |  16M|  44 |
|*  1 |  HASH JOIN  |  | 45000 |  16M|  44 |
|  2 |  TABLE ACCESS FULL| T1  |  3000 |  547K|  14 |
|  3 |  TABLE ACCESS FULL| T2  |  3000 |  547K|  14 |
———————————————————–

select  /*+ leading(table_1 table_2) use_hash(table_2) swap_join_inputs(table_2) */ *
from  t1 table_1, t2 table_2
where  table_1.n1 = table_1.n1;

———————————————————–
| Id  | Operation  | Name | Rows  | Bytes | Cost  |
———————————————————–
|  0 | SELECT STATEMENT  |  | 45000 |  16M|  44 |
|*  1 |  HASH JOIN  |  | 45000 |  16M|  44 |
|  2 |  TABLE ACCESS FULL| T2  |  3000 |  547K|  14 |
|  3 |  TABLE ACCESS FULL| T1  |  3000 |  547K|  14 |
———————————————————–

关于 oracle hash join 原理及注意事项有哪些问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注丸趣 TV 行业资讯频道了解更多相关知识。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-20发表,共计2279字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 国产三级视频 | 自拍偷拍 亚洲 | 国产高清在线精品免费不卡 | 亚洲欧美婷婷 | 亚洲国产欧美在线人网站 | 色婷婷综合中文久久一本 | 免费一级黄色大片 | 亚洲一级毛片免观看 | 亚洲天堂男人 | 欧美一级手机免费观看片 | 日韩亚洲人成在线综合 | 亚洲欧洲美洲无码精品va | 欧美人与牲动交xxxx | 一级特黄aa大片免费 | 免费a级毛片在线播放 | a级毛片无码免费真人 | 少妇被爽到高潮喷水久久欧美精品 | 中文字幕一区二区三区精华液 | 成人毛片18岁女人毛片免费看 | 亚洲午夜天堂 | 久久精品国产亚洲av成人 | 亚洲在线视频免费观看 | 高潮毛片又色又爽免费 | 免费看的黄色录像 | 最新亚洲人成网站在线影院 | 日韩中文字幕在线免费观看 | 视频一区二区国产 | 911精品国产亚洲日本美国韩国 | 中文字幕欧洲有码无码 | 国产精品人妻一区夜夜爱 | 2020年最新国产精品视频免费 | 免费一区二区 | 国产福利小视频在线播放观看 | 中文字幕精品一区二区2021年 | 日韩av在线观看免费 | 中文无码久久精品 | 任你干免费视频 | 成年女人喷潮毛片免费播放 | 草草影院私人免费入口 | 欧美精品黑人粗大免费 | 免费精品国偷自产在线2020 |