zoukankan      html  css  js  c++  java
  • 选择方法Oracle Hints 用法

    这段时间朋友几篇文章介绍了改选择方法的文章. 关联文章的地址

            1. /*+ALL_ROWS*/
    标明对语句块选择基于开销的优化方法,并取得佳最吞吐量,使资源消费最小化.
    例如:
    SELECT /*+ALL+_ROWS*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='SCOTT';
    2. /*+FIRST_ROWS*/
    标明对语句块选择基于开销的优化方法,并取得佳最响应时间,使资源消费最小化.
    例如:
    SELECT /*+FIRST_ROWS*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='SCOTT';
    3. /*+CHOOSE*/
    标明如果数据字典中有问访表的统计息信,将基于开销的优化方法,并取得佳最的吞吐量;
    标明如果数据字典中没有问访表的统计息信,将基于则规开销的优化方法;
    例如:
    SELECT /*+CHOOSE*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='SCOTT';

        4. /*+RULE*/
    标明对语句块选择基于则规的优化方法.
    例如:
    SELECT /*+ RULE */ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='SCOTT';

        5. /*+FULL(TABLE)*/
    标明对表选择全局描扫的方法.
    例如:
    SELECT /*+FULL(A)*/ EMP_NO,EMP_NAM FROM BSEMPMS A WHERE EMP_NO='SCOTT';

        6. /*+ROWID(TABLE)*/
    提示明白标明对指定表根据ROWID行进问访.
    例如:
    SELECT /*+ROWID(BSEMPMS)*/ * FROM BSEMPMS WHERE ROWID>='AAAAAAAAAAAAAA'
    AND EMP_NO='SCOTT';

        7. /*+CLUSTER(TABLE)*/
    提示明白标明对指定表选择簇描扫的问访方法,它只对簇对象有效.
    例如:
    SELECT /*+CLUSTER */ BSEMPMS.EMP_NO,DPT_NO FROM BSEMPMS,BSDPTMS
    WHERE DPT_NO='TEC304' AND BSEMPMS.DPT_NO=BSDPTMS.DPT_NO;

        8. /*+INDEX(TABLE INDEX_NAME)*/
    标明对表选择引索的描扫方法.
    例如:
    SELECT /*+INDEX(BSEMPMS SEX_INDEX) USE SEX_INDEX BECAUSE THERE ARE FEWMALE BSEMPMS */ FROM BSEMPMS WHERE SEX='M';

        9. /*+INDEX_ASC(TABLE INDEX_NAME)*/
    标明对表选择引索升序的描扫方法.
    例如:
    SELECT /*+INDEX_ASC(BSEMPMS PK_BSEMPMS) */ FROM BSEMPMS WHERE DPT_NO='SCOTT';

        10. /*+INDEX_COMBINE*/
    为指定表选择位图问访路经,如果INDEX_COMBINE中没有供提作为数参的引索,将选择出位图引索的尔布组合式方.
    例如:
    SELECT /*+INDEX_COMBINE(BSEMPMS SAL_BMI HIREDATE_BMI)*/ * FROM BSEMPMS
    WHERE SAL<5000000 AND HIREDATE

        11. /*+INDEX_JOIN(TABLE INDEX_NAME)*/
    提示明白令命优化器用使引索作为问访径路.
    例如:
    SELECT /*+INDEX_JOIN(BSEMPMS SAL_HMI HIREDATE_BMI)*/ SAL,HIREDATE
    FROM BSEMPMS WHERE SAL<60000;

        12. /*+INDEX_DESC(TABLE INDEX_NAME)*/
    标明对表选择引索降序的描扫方法.
    例如:
    SELECT /*+INDEX_DESC(BSEMPMS PK_BSEMPMS) */ FROM BSEMPMS WHERE DPT_NO='SCOTT';

        13. /*+INDEX_FFS(TABLE INDEX_NAME)*/
    对指定的表执行倏地全引索描扫,而不是全表描扫的方法.
    例如:
    SELECT /*+INDEX_FFS(BSEMPMS IN_EMPNAM)*/ * FROM BSEMPMS WHERE DPT_NO='TEC305';

        14. /*+ADD_EQUAL TABLE INDEX_NAM1,INDEX_NAM2,...*/
    提示明白行进执行计划的选择,将几个单列引索的描扫合起来.
    例如:
    SELECT /*+INDEX_FFS(BSEMPMS IN_DPTNO,IN_EMPNO,IN_SEX)*/ * FROM BSEMPMS WHERE EMP_NO='SCOTT' AND DPT_NO='TDC306';

        15. /*+USE_CONCAT*/
    对查询中的WHERE前面的OR条件行进转换为UNION ALL的组合查询.
    例如:
    SELECT /*+USE_CONCAT*/ * FROM BSEMPMS WHERE DPT_NO='TDC506' AND SEX='M';

        16. /*+NO_EXPAND*/
    对于WHERE前面的OR 或者IN-LIST的查询语句,NO_EXPAND将止阻其基于优化器对其行进扩展.
    例如:
    SELECT /*+NO_EXPAND*/ * FROM BSEMPMS WHERE DPT_NO='TDC506' AND SEX='M';

        17. /*+NOWRITE*/
    制止对查询块的查询重写操纵.

        18. /*+REWRITE*/
    可以将视图作为数参.

        19. /*+MERGE(TABLE)*/
    可以对视图的各个查询行进应相的并合.
    例如:
    SELECT /*+MERGE(V) */ A.EMP_NO,A.EMP_NAM,B.DPT_NO FROM BSEMPMS A (SELET DPT_NO
    ,AVG(SAL) AS AVG_SAL FROM BSEMPMS B GROUP BY DPT_NO) V WHERE A.DPT_NO=V.DPT_NO
    AND A.SAL>V.AVG_SAL;

        每日一道理
    在每一个人心中,都曾停留过那些值得怀念的人,也许还在,也许早已消逝,在茫茫人海中丢失,于是,那份怀念便得凄凉,因为模糊的记忆中只剩下一个“空壳”,没有什么,甚至连自己的心都装不下,时间把一切抹平,也把当日的泪水封锁,因为已经没有,怀念只是悲凉!

        20. /*+NO_MERGE(TABLE)*/
    对于有可并合的视图不再并合.
    例如:
    SELECT /*+NO_MERGE(V) */ A.EMP_NO,A.EMP_NAM,B.DPT_NO FROM BSEMPMS A (SELECT DPT_NO,AVG(SAL) AS AVG_SAL FROM BSEMPMS B GROUP BY DPT_NO) V WHERE A.DPT_NO=V.DPT_NO AND A.SAL>V.AVG_SAL;

        21. /*+ORDERED*/
    根据表出当初FROM中的序顺,ORDERED使ORACLE依此序顺对其接连.
    例如:
    SELECT /*+ORDERED*/ A.COL1,B.COL2,C.COL3 FROM TABLE1 A,TABLE2 B,TABLE3 C WHERE A.COL1=B.COL1 AND B.COL1=C.COL1;

        22. /*+USE_NL(TABLE)*/
    将指定表与套嵌的接连的行源行进接连,并把指定表作为外部表.
    例如:
    SELECT /*+ORDERED USE_NL(BSEMPMS)*/ BSDPTMS.DPT_NO,BSEMPMS.EMP_NO,BSEMPMS.EMP_NAM FROM BSEMPMS,BSDPTMS WHERE BSEMPMS.DPT_NO=BSDPTMS.DPT_NO;

        23. /*+USE_MERGE(TABLE)*/
    将指定的表与其他行源通过并合排序接连式方接连起来.
    例如:
    SELECT /*+USE_MERGE(BSEMPMS,BSDPTMS)*/ * FROM BSEMPMS,BSDPTMS WHERE BSEMPMS.DPT_NO=BSDPTMS.DPT_NO;

        24. /*+USE_HASH(TABLE)*/
    将指定的表与其他行源通过哈希接连式方接连起来.
    例如:
    SELECT /*+USE_HASH(BSEMPMS,BSDPTMS)*/ * FROM BSEMPMS,BSDPTMS WHERE BSEMPMS.DPT_NO=BSDPTMS.DPT_NO;

        25. /*+DRIVING_SITE(TABLE)*/
    强制与ORACLE所选择的位置不同的表行进查询执行.
    例如:
    SELECT /*+DRIVING_SITE(DEPT)*/ * FROM BSEMPMS,DEPT@BSDPTMS WHERE BSEMPMS.DPT_NO=DEPT.DPT_NO;

        26. /*+LEADING(TABLE)*/
    将指定的表作为接连顺序中的首表.

        27. /*+CACHE(TABLE)*/
    当行进全表描扫时,CACHE提示可以将表的检索块放置在缓冲区缓存中近来少最列表LRU的近来用使端
    例如:
    SELECT /*+FULL(BSEMPMS) CAHE(BSEMPMS) */ EMP_NAM FROM BSEMPMS;

        28. /*+NOCACHE(TABLE)*/
    当行进全表描扫时,CACHE提示可以将表的检索块放置在缓冲区缓存中近来少最列表LRU的近来用使端
    例如:
    SELECT /*+FULL(BSEMPMS) NOCAHE(BSEMPMS) */ EMP_NAM FROM BSEMPMS;

        29. /*+APPEND*/
    直接入插到表的最后,可以高提度速.
    insert /*+append*/ into test1 select * from test4 ;

        30. /*+NOAPPEND*/
    通过在入插语句生活期内停止并行模式来动启规常入插.
    insert /*+noappend*/ into test1 select * from test4 ;

     31. NO_INDEX: 指定不用使哪些引索
      /*+ NO_INDEX ( table [index [index]...] ) */
      select /*+ no_index(emp ind_emp_sal ind_emp_deptno)*/ * from emp where deptno=200 and sal>300;

      32. parallel
      select /*+ parallel(emp,4)*/ * from emp where deptno=200 and sal>300;
      另:每一个SELECT/INSERT/UPDATE/DELETE令命后只能有一个/*+ */,但提示内容可以有多个,可以用逗号开分,空格也可以。
      如:/*+ ordered index() use_nl() */
    ---------
    似类如下的一条语句:insert into xxxx select /*+parallel(a) */ * from xxx a;数据量大约在75G阁下,这位兄弟从上午跑到下昼还没跑完,来过问我咋回事,说常平2hrs能跑完的西东跑了好几个小时还撒消息。查看系统性能也比拟 常正,cpu,io都不忙繁,均平READ度速在80M/s阁下(强勉将就),但均平写度速只有10M不到。待等事件里头大批的‘ ‘PX Deq Credit: send blkd’,这里能看出并行出了问题,从而最后知得是并行用法有问题,改修以后20分钟完成了该操纵。确正的做法应该是:
    alter session enable dml parallel;
    insert /*+parallel(xxxx,4) */ into xxxx select /*+parallel(a) */ * from xxx a;

        ******************************************************
    parallel + nologging
    alter session enable parallel;
    alter table t nologging;
    insert /*+ append paralle(t) */ into t
    select /*+ parallel(t2) */ * from t2;
    ******************************************************

    文章结束给大家分享下程序员的一些笑话语录: 自从有了Photoshop,我再也不相信照片了!(没有Photoshop的年代,胶片照片年代做假的也不少,那时候都相信假的!)

  • 相关阅读:
    HDU 4024 Dwarven Sniper’s hunting(数学公式 或者是二分)
    二分图最大匹配总结
    HDU 4022 Bombing (STL应用)
    HDU 1847 Good Luck in CET4 Everybody!(组合博弈)
    HDU 1556 Color the ball(树状数组)
    HDU 4023 Game(博弈)
    HDU 1406 完数(水题)
    HDU 4021 24 Puzzle
    Oracle 多表查询优化
    【编程之美】字符串移位包含的问题(续)
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3067690.html
Copyright © 2011-2022 走看看