Oracle中的HashJoin连接分析

Oracle中的HashJoin连接分析

ID:41561458

大小:90.46 KB

页数:4页

时间:2019-08-27

Oracle中的HashJoin连接分析_第1页
Oracle中的HashJoin连接分析_第2页
Oracle中的HashJoin连接分析_第3页
Oracle中的HashJoin连接分析_第4页
资源描述:

《Oracle中的HashJoin连接分析》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Oracle中的HashJoin连接分析1、HashJoin基本原理哈希连接(HASHJOIN)是一种两个表在做表连接时主要依靠哈希运算来得到连接结果集的表连接方法。本质上说,HashJoin连接是借助Hash算法,连带小规模的NestLoopJoin,

2、h]时利用内存空间进行高速数据缓存检索的一种算法。HashJoin算法主要包括以下几个步骤:(1)HashJoin连接对象依然是两个数据表,首先选择出其中一个“小表二这里的小表,就是参与连接操作的数据集合数据量小。对连接列字段的所有数据值,进行Hash函数操作。Hash函数是计算机科学中经常使用到的一种处理函数,利

3、用Hash值的快速搜索算法已经被认为是成熟的检索手段。Hash函数处理过的数据特征是“相同数据值的Hash函数值一定相同,不同数据值的Hash函数值可能相同";(2)经过Hash处理过的小表连接列,连同数据一起存放到OraclePGA空间中。PGA中存在一块空间为hash.area,专门存放此类数据。并且,依据不同的Hash函数值,进行划分Bucket操作。每个Bucket中包括所有相同hash函数值的小表数据。同时建立Hash值对应位图。(3)之后对进行Hash连接大表数据连接列依次读取,并且将每个Hash值进行Bucket匹配,定位到适当的Bucket上(应用H

4、ash检索算法);(4)在定位到的Bucket中,进行小规模的精确匹配。因为此时的范围已经缩小,进行匹配的成功率精确度高。同时,匹配操作是在内存中进行,速度较MergeSortJoin时要快很多。从理论上来说,哈希连接的执行效率会比排序合并连接和嵌套循环连接的执行效率要高,当然,实际情况并不总是这样。在Oracle10g及其以后的Oracle数据库版本中,优化器(实际上是CBO,因为哈希连接仅适用于CBO)在解析目标SQL时是否考虑哈希连接是受限于隐含参数_HASH_JOIN_ENABLED,而在Oracle10g以前版本中,CBO在解析目标SQL时是否考虑哈希连接

5、是受限于参数HASH_JOIN_ENABLED。_HASH_JOIN_ENABLED的默认值是TRUE,表示允许CBO在解析目标SQL时考虑哈希连接。当然,即使你将该参数的值改成了FALSE,使用USE.HASHHint依然可以让CBO在解析目标SQL时考虑哈希连接,这说明USE_HASHHint的优先级高于参数—HASH_JOIN_ENABLED。2、HashJoin分析2.1案例下面是最常见的一个SQL写法:select*fromuserinfoa,userlogbwherea.id=b.idanda.name=,la,Userinfo为用户信息表,假设User

6、info字段通过name字段过滤后返回10条记录,Userlog为用户交易详情表,一个用户在此表中有多条记录,假设平均每个用户10条记录。createtableuserinfo(idnumber,namevarchar2(20),other_columnchar(2000));createtableuserlog(idvarchar2(20),tran_datedate,other_columnchar(2000));beginforiin1..1000loopforjin1..10loopinsertintouserlogvalues(i,sysdate-trun

7、c(dbms_random.value(0,30))J

8、

9、:J);endloop;commit;endloop;end;declarev_sqlvarchar2(8000):=insertintouserinfovalues(:bl,:b2,:b3):beginforiin1..1000loopexecuteimmediatev_sqlusingi,i『aTother_desc.J;commit;endloop;end;/2.2HashJoin各种连接顺序和访问路径成本分析全扫userinfo执行,对于每条记录中的id字段,应用下面的hash函数,保存在内存中。全4

10、^userlog应用hash函数记录id=l到桶1中进行比较,只需要比较1条或者少数几条;记录id=2到桶1中进行比较,只需要比较1条或者少数几条;直到所有记录被比对完成。总成本为两张表单表访问路径的成本!即使不存在索引,也就是两张表的全扫,与记录数无关。(应用hash函数和比对跑在CPU上,不算瓶颈)!(1)表连接顺序userinfo->userlog>Userinfo表name字段存在索引Userinfo表单表访问路径为索引,返回10条,将id字段应用hash函数,平均打散到多个桶中,接下来开始扫描Userlog表,由于该表不存在过滤条件,因此单表访问路径为

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。