zoukankan      html  css  js  c++  java
  • oracle 初试 hint

    最近在研究oracle的视图问题,本来想全转成 物化视图(materialized view)的,这样可以极大提升系统的响应时间,无奈工作量太大,所以就研究了SQL优化的问题。

    我这个普通视图 有360行,其中还有left join 了多个别的视图,这些个视图也有300+行。

    所以在朋友指导下,尝试了一下HINT。

    步骤1 :

    查出这个视图的SQL_ID :

    select sql_id from v$sql where sql_text like '%你中间关键语句%'
    

    步骤2 :

    select * from table(dbms_xplan.display_cursor(sql_id => '12ynt5upntqm7',cursor_child_no => 0,format => 'advanced'));
    

    执行结果如下 :

    Outline Data
    -------------

    PLAN_TABLE_OUTPUT
    --------------------------------------------------------------------------------

    /*+
    BEGIN_OUTLINE_DATA
    IGNORE_OPTIM_EMBEDDED_HINTS
    OPTIMIZER_FEATURES_ENABLE('11.2.0.4')
    DB_VERSION('11.2.0.4')
    ALL_ROWS
    OUTLINE_LEAF(@"SEL$88122447")
    MERGE(@"SEL$641071AC")
    OUTLINE(@"SEL$1")
    OUTLINE(@"SEL$641071AC")

    PLAN_TABLE_OUTPUT
    --------------------------------------------------------------------------------
    MERGE(@"SEL$07BDC5B4")
    OUTLINE(@"SEL$2")
    OUTLINE(@"SEL$07BDC5B4")
    MERGE(@"SEL$4")
    OUTLINE(@"SEL$3")
    OUTLINE(@"SEL$4")
    FULL(@"SEL$88122447" "X$KGLCURSOR_CHILD"@"SEL$4")
    END_OUTLINE_DATA
    */

    Predicate Information (identified by operation id):

    把中间这一坨 放到之前视图对应SQL 的最前面,例如 :

    SELECT
    /*+
    BEGIN_OUTLINE_DATA
    IGNORE_OPTIM_EMBEDDED_HINTS
    OPTIMIZER_FEATURES_ENABLE('11.2.0.4')
    DB_VERSION('11.2.0.4')
    ALL_ROWS
    OUTLINE_LEAF(@"SEL$88122447")
    MERGE(@"SEL$641071AC")
    OUTLINE(@"SEL$1")
    OUTLINE(@"SEL$641071AC")
    MERGE(@"SEL$07BDC5B4")
    OUTLINE(@"SEL$2")
    OUTLINE(@"SEL$07BDC5B4")
    MERGE(@"SEL$4")
    OUTLINE(@"SEL$3")
    OUTLINE(@"SEL$4")
    FULL(@"SEL$88122447" "X$KGLCURSOR_CHILD"@"SEL$4")
    END_OUTLINE_DATA
    */
    DISTINCT part11.ccp from 啪啦啪啦啪啪啪

    速度从 1.9秒 提升到1秒。

    50%的提升,帅翻了~~~

    感谢 小枫 的大力帮助啊~~~~

  • 相关阅读:
    [LeetCode] 981. Time Based Key-Value Store
    [LeetCode] 97. Interleaving String
    [LeetCode] 953. Verifying an Alien Dictionary
    代价敏感的学习方法
    深度学习中Dropout原理解析
    梯度下降法的三种形式BGD、SGD以及MBGD
    吉布斯采样(Gibbs Sampling)简介(转)
    Java中next()和hasNext() ? nextLine()和hasNextLine()?区别详解
    红黑树介绍及旋转详解
    Pycharm中实现openCV安装好后简单测试
  • 原文地址:https://www.cnblogs.com/woxiangbo/p/5355986.html
Copyright © 2011-2022 走看看