我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

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  *
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  *
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原理及注意事项有哪些问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

assert的用法及注意事项有哪些

这篇文章主要介绍“assert的用法及注意事项有哪些”,在日常操作中,相信很多人在assert的用法及注意事项有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”assert的用法及注意事项有哪些”的疑惑有所
2023-06-02

sql的join函数使用要注意哪些事项

在使用SQL的JOIN函数时,需要注意以下事项:指定JOIN条件:在使用JOIN函数时,需要明确指定连接两个表的条件,否则可能会得到错误的结果。区分不同类型的JOIN:SQL中有多种JOIN类型,如INNER JOIN、LEFT JOIN、
sql的join函数使用要注意哪些事项
2024-05-21

建站有哪些注意事项

本篇内容主要讲解“建站有哪些注意事项”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“建站有哪些注意事项”吧!  医疗行业作为一个特殊、敏感的行业,做好网站建设是一件很不容易的事情。随着互联网的高速
2023-06-10

oracle安装要注意哪些事项

确保系统要求:在安装Oracle数据库之前,确保系统符合Oracle数据库的最低硬件和软件要求,包括操作系统版本、内存、硬盘空间等。检查系统配置:在安装过程中,确保系统的配置是正确的,包括字符集、语言设置、网络配置等。安装顺序:按照Orac
oracle安装要注意哪些事项
2024-04-09

SEO写原创文章注意的事项有哪些

这篇文章给大家分享的是有关SEO写原创文章注意的事项有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。  首先是文章的标题具有长尾词特性,文章页的作用除了作为新的内容吸引蜘蛛爬取,增加网站的收录之外,还是一个布
2023-06-10

mysql8.0.27配置的方法及有哪些注意事项

这篇文章主要介绍“mysql8.0.27配置的方法及有哪些注意事项”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“mysql8.0.27配置的方法及有哪些注意事项”文章能帮助大家解决问题。选择这个直接
2023-06-29

查询Oracle表要注意哪些事项

查询Oracle表时,需要注意以下事项:确保有合适的访问权限:在查询Oracle表之前,确保你具有足够的权限来访问该表。如果没有足够的权限,你将无法查询该表。使用正确的语法:在编写查询语句时,确保使用正确的SQL语法。错误的语法可能会导致查
查询Oracle表要注意哪些事项
2024-04-09

MYSQL group by 有哪些注意事项

目录1.group by 后面不能加 where2.having 或 group by 可单独使用3.having 和 group by 可使用别名为什么where不能用别名?为having却可以?总结前言:注意:本文以下内容基于 MyS
2022-07-05

编程热搜

目录