HASH 嵌套链接.docxVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
HASH 嵌套链接

use_merge(a b)—rbo—合并排序*+ use_nl(a b)—cbo*+ use_hash(a b)嵌套循环 哈希连接 因为oracle基于成本(cbo)的优化器一般最长使用的就是这两种连接方式,而性能在这里也可以很好的调节。hash连接需要耗费大量的cpu和内存,而嵌套循环则会少很多。在大数据量的双表连接中,哈希连接明显要有更好的性能。但是当一个小数量级的表和一个大数量级别的表连接的时候,优化就很难处理了。我在oracle这里现在最大的问题就在这里。这是一个实例。 表信息:?pl_repay? 记录数 索引?due_bill????????????????pl_repay_ind1 repay_dt??????????????? pl_repay_ind2 repay_acct_type_cd????? pl_repay_ind3 cl_mid_ext_source?记录数?8604/16万 索引 due_bill??????????????? ix_pl_mid_due_bill 脚本:??这是我写的一个测试sql,用来测试从pl_repay取到cl_mid_ext_source相关联的记录的集合的脚本。这是最初始的执行计划a: 这是删除掉where条件后的执行计划b: 这是测试结果 分析a监视服务器cpu占用情况,16万时保持在40%以上。执行步骤1.在pl_repay上的索引(repay_dt)pl_repay_ind2 的范围检索。事实上,这里需要检索的记录数是差不多700万。占表中数据的50%。不知道是否限制索引会好些,有待测试。2.在第一步结果集基础上,基于index rowid的全表扫描。3.把cl_mid_ext_source全表扫描结果集放入内存,建立散列表。4.在第二步的结果集上检索due_bill列和存入内存的表中相匹配的行。分析b执行步骤1.嵌套循环,检索pl_repay表中和cl_mid_ext_source中记录符合的记录。2.全表扫描pl_repay?根据 index rowid,找出匹配的记录。?测试结果证明在小数据量的情况下,嵌套循环会有最佳的性能。而在大数据量的情况下哈希连接会有更好的性能。这里的问题就是,如何才能把去掉where后的嵌套循环连接方法,做到自己可控制。使用提示 use_nl 后,并未获得和b一样的执行计划。性能和哈希无差别。这是我现在的一个大的疑问。在Oracle中,确定连接操作类型是javascript:;执行计划生成的重要方面。各种连接操作类型代表着不同的连接操作算法,不同的连接操作类型也适应于不同的数据量和数据分布情况。论是Nest Loop Join(嵌套循环),还是Merge Sort Join(合并排序连接),都是适应于不同特殊情况的古典连接方法。Nest Loop Join算法虽然可以借助连接列索引,但是带来的随机读成本过大。而Merge Sort Join虽然可以减少随机读的情况,但是带来的大规模Sort操作,对内存和Temp空间压力过大。两种算法在处理海量数据的时候,如果是海量随机读还是海量排序,都是不能被接受的连接算法。本篇中,我们介绍目前比较常用的一种连接方式javascript:;Hash Join连接。1、Hash Join(哈希连接)原理从Oracle 7.3开始,Hash Join正式进入优化器执行计划生成,只有CBO才能使用Hash Join操作。本质上说,Hash Join连接是借助Hash算法,连带小规模的Nest Loop Join,同时利用内存空间进行高速数据缓存检索的一种算法。下面我们分步骤介绍Hash Join算法步骤:?i.?Hash Join连接对象依然是两个数据表,首先选择出其中一个“小表”。这里的小表,就是参与连接操作的数据集合数据量小。对连接列字段的所有数据值,进行Hash函数操作。Hash函数是计算机科学中经常使用到的一种处理函数,利用Hash值的快速有哪些信誉好的足球投注网站算法已经被认为是成熟的检索手段。Hash函数处理过的数据特征是“相同数据值的Hash函数值一定相同,不同数据值的Hash函数值可能相同”; ii.?经过Hash处理过的小表连接列,连同数据一起存放到Oracle PGA空间中。PGA中存在一块空间为hash_area,专门存放此类数据。并且,依据不同的Hash函数值,进行划分Bucket操作。每个Bucket中包括所有相同hash函数值的小表数据。同时建立Hash键值对应位图。iii.?之后对进行Hash连接大表数据连接列依次读取,并且将每个Hash值进行Bucket匹配,定位到适当的Bucket上(应用Hash检索算法);iv.?在定位到的Bucket中,进行小规模的精确匹

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档