网站大量收购独家精品文档,联系QQ:2885784924

对于连接运算.PPT

  1. 1、本文档共51页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
对于连接运算

R为外关系(outer relation), S为内关系(inner relation)。 事实上,关系是以物理块为单位取到内存,设R和S各有一缓冲块, PR为R的块因子(每块中所含的元组数)。则R每次I/O取PR个元组,可改进上述算法,使S扫描一次可以与R的PR个元组比较,那么S的扫描次数为bR=[n/PR] 。 R S 物理块 物理块 假设,bR和bS分别为关系R和关系S占用物理块的数目(bR=[n/PR]),nB为可供连接使用的缓冲块数。若将其中的nB-1块作为外关系缓冲块,1块作为内关系缓冲块。 则以R为外关系、S为内关系,用嵌套循环法进行连接所需访问的物理块数为bR+[bR/(nB-1)]*bS,对应最小I/O值。 问题:增加外关系R的缓冲块(每次多取几块R的数据)或增加内关系S的缓冲块都能减少I/O次数。 为什么将nB-1块作为外关系缓冲块,1块作为内关系缓冲块,是最优分配策略? 问题:嵌套循环法进行连接操作,以R为外关系、S为内关系;还是以S为外关系、R为内关系所需I/O次数更少?作为外层循环的关系,有什么要求? 应将占用物理块少的关系,作为外关系! 2).利用索引或散列寻找匹配元组法 在嵌套循环法中,内关系上要做多次顺序扫描,若内关系上有合适的存取路径(连接属性上的索引散列等),可以避免内关系上的顺序扫描,以减少I/O次数。 问题:若在内关系的连接属性上建有索引?是否一定能够提高内关系和外关系的匹配效率? 当每次循环所选的匹配元组数在内关系中占有较大比例(例如超过15%)时,用无序索引甚至还不如用顺序扫描的方法。内关系的连接属性上有簇集索引时,索引对减少连接所需I/O次数的作用最明显。 3).排序归并 如果R和S按连接属性排序,可按序比较R.A和S.B以找出匹配元组。 跳过 ? R.A 2 S.B 1 3 2 3 3 5 3 7 6 8 7 跳过 跳过 算法: R按属性A排序 /*设R有n个元组*/ S按属性B排序 /*设S有m个元组*/ i?1,j?1; While(i?n)and(j ?m) do{if R(i)[A]S(j)[B] then j?j+1 else if R(i)[A]S(j)[B] then i?i+1 else{ /* R(i)[A]=S(j)[B],输出连接元组*/ 输出 R(i),S(j) 至T; /*输出R(i)和S中除S(j)外的其他元组所组成的连接元组 */ l?j+1; While(l?m) and (R(i)[A]=S(l)[B]) do{输出 R(i),S(l) 至T; l?l+1;} /*输出S(j)和R中除R(i)外的其他元组所组成的连接元组 */ k?i+1; While(k?n) and (R(k)[A]=S(j)[B]) do{输出 R(k),S(j) 至T; k?k+1;} i?i+1,j?j+1;} } 问题:等值匹配对使用排序归并法进行连接操作的效率有什么影响? p个 q个 R.A 2 S.B 2 2 2 2 2 2 2 . . . . . . 注意等值的扫描次数(假设p?q): [1+(q-1)+(p-1)]+[1+(q-2)+(p-2)]+… +[1+(q-p)+(p-p)] =[(p+q-1)+(p+q-2q+1)]/2*p =p*q ? O(pq) 4).散列连接法 连接属性R.A和S.B应具有相同的值域,用相同的散列函数,把R和S散列到同一散列文件中。符合连接条件的元组必然在同一通中(注意:同一桶中的元组未必都满足连接条件)。只需把桶中的匹配元组取出即可获得连接结果。 关键在于建立一个供连接用的散列文件。 可以在桶(散列文件)中不填入R、S的实际元组,而是代之以元组的tid,从而大大的缩小散列文件,使其有可能在内存中建立,而仅需对R、S各扫描一次。 建立散列文件需要对R、S各扫描一次,且关系R和S一般不会对连接属性进行簇集。故而,每向散列文件加入一个元组,都需要一次I/O操作。 如何减少I/O次数?

您可能关注的文档

文档评论(0)

zhuwo + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档