ITPub博客

首页 > 数据库 > Oracle > oracle表的连接

oracle表的连接

原创 Oracle 作者:26125794 时间:2016-02-14 18:13:58 0 删除 编辑
在电信、金融领域的数据库相关应用中,表连接总体的比例大概是为,nested loops join占了70%左右,而hash join占了20%多,剩下的大致10%是merge sort join


各类连接访问次数的差异
nested loop(循环嵌套连接)
select  /*+leading(t1)use_nl(t2)*/ * from t1,t2 where t1.id=t2.t1_id
驱动表返回多少记录,被驱动表就会被访问多少次;
循环嵌套连接要特别注意驱动表的顺序,小的结果集先访问,大的结果集后访问;


hash连接
select  /*+leading(t1)use_hash(t2)*/ * from t1,t2 where t1.id=t2.t1_id
在hash连接中,驱动表与被驱动表都只会被访问0次或者1次;
hash连接驱动表的顺序也很重要,性能也有显著的差异;


排序合并连接
select  /*+leading(t1)use_merge(t2)*/ * from t1,t2 where t1.id=t2.t1_id
在排序合并连接中,和hash连接一样,驱动表与被驱动表都只会被访问0次或者1次;
排序合并连接并没有驱动表与被驱动表的概念,而循环嵌套和哈希连接要考虑驱动和被驱动的概念;




除了循环嵌套连接之外,排序合并连接和哈希连接都需要排序;


关于哈希连接,排序合并连接这两种连接方式,有一个简单的方法就是不要过多的字段参与排序;




表连接的场景限制
hash不支持<>连接、大于和小于的写法也不支持,此外hash连接也不支持like的连接方式;
合并排序连接不支持<>连接,也不支持like连接,但是比起hash连接,支持>之类的连接;
循环嵌套连接无任何限制;


表连接与索引的应用
循环嵌套连接与索引
驱动表的限制列上加索引有助于快速定位到限制列的值,而后在被驱动表的连接条件列上有索引,也是能够快速返回定位的值;


哈希连接与索引
哈希连接、排序合并连接和循环嵌套连接与的最大区别就是连接条件的索引对于连接列起不到传递作用;
哈希连接需要在PGA中的HASH_AREA_SIZE中完成,因此增大HASH_AREA_SIZE,是一种有效的优化方法


合并排序连接与索引
索引能够消除合并连接的排序,但是只能消除一张表的排序,期优化思路也是考虑是否可以增大PGA,增大内存排序区,避免排序尺寸在磁盘中排序;
;

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/27057145/viewspace-1988603/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 索引优化笔记
请登录后发表评论 登录
全部评论

注册时间:2012-06-18

  • 博文量
    14
  • 访问量
    28980