zoukankan      html  css  js  c++  java
  • oracle优化之表连接方式

    1、表连接类型:

      Nested Loops Join

      Hash Join

      Merge Sort Join

    2、表连接的知识点:

      表访问次数、表驱动顺序,是否排序,使用限制。

      Nested Loops Join:驱动表被访问0次或1次,被驱动表访问0次或N次,N由驱动表返回的结果集的条数来定。

                与驱动顺序有关

                 无排序

                 无使用限制

      Hash Join    :访问次数:1次或0次

                与驱动顺序有关

                 无排序(耗内存)

                 不支持 >   <   like   <>  等  

      Merge Sort Join  :访问次数:1次或0次

                与驱动顺序无关

                 有排序

                 支持 >   <  ,但不支持 like   <>  等

    3、 访问次数

    create table m1 (
    id number not null,
    n number,
    content varchar(4000)
    )
    
    create table m2 (
    id number not null,
    t1_id number not null,
    n number,
    content varchar(4000)
    )
    
    insert into m1
    select rownum,rownum,dbms_random.string('a',50)
    from dual connect by level <=100
    order by dbms_random.random;
    
    insert into m2
    select rownum,rownum,rownum,dbms_random.string('a',50)
    from dual connect by level <=100000
    order by dbms_random.random;
    
    select *  from m1,m2 where m1.id=m2.t1_id;
    select /*+ gather_plan_statistics */  *  from m1,m2 where m1.id=m2.t1_id;
    select /*+ leading(m1) use_nl(m2)*/   *  from m1,m2 where m1.id=m2.t1_id;
    select /*+ leading(m1) use_nl(m2)*/ *  from m1,m2 where m1.id=m2.t1_id and m1.n in('2','18',30);
    
    select /*+ leading(m1) use_hash(m2) */ * from m1,m2 where m1.id=m2.t1_id

     4、Nested Loops Join 优化

      1)确保在OLTO场景:在大量访问,且每个访问的最终返回的记录很少的场景。

      2)驱动表的限制条件要考虑建立索引:
          select /*+ leading(m1) use_nl(m2)*/ * from m1,m2 where m1.id=m2.t1_id and m1.n in('2','18',30);

          可以建m1表的字段n为索引段,建m2表的字段t1_id为索引段

      3)确保小结果集先驱动,大的被驱动。

      4)统计信息收集不准确引发性能瓶颈,预估返回1条,实际返回477k条,预估不准确导致使用NL连接。

        

     5、Hash Join优化

      1)确保用在全扫描的OLAP场景:最终返回的结果记录比较多

      2)明确连接条件是否限制了Hash Join

      3)两表无任何索引倾向Hash Join

         4)两表限制条件有索引(看返回量)

     5、Merge Sort Join优化

      1)确保用在全扫描的OLAP场景:最终返回的结果记录比较多

      2)明确连接条件是否限制了Hash Join。支持 >   <  ,但不支持 like   <>  等

      3)两表限制条件有索引(看返回量)

      4)避免取多余列致排序的尺寸太大

      

  • 相关阅读:
    Javascript的异步和回调
    JS-使用工厂方法创建对象
    PHPUnit使用教程——PHP环境变量+x-debug+composer+phpunit配置安装(超详细!)
    JQuery 纵向二级菜单与对齐方式
    图像映射<map>、<area>
    打开另一个窗口
    多行文本省略号
    replace 正则
    jquery each用法
    li前面的原点或者方的样式修改html中列表项li所显示的圆点的颜色?,以及相关样式的设定
  • 原文地址:https://www.cnblogs.com/yaohuiqin/p/11678172.html
Copyright © 2011-2022 走看看