zoukankan      html  css  js  c++  java
  • 包含绑定变量的sql进行调优需注意一点

      拿1个sql举个例子,我只贴出了where后面部分

         实际环境中有init_date 和direct_no的组合索引IDX_DATE_NO

         上诉标红处,:b3=0 和:b3<>0这两种情况oracle在选择执行计划的时候会有很大的区别。

    如果是:b3<>0,则oracle会在index_range_scan IDX_DATE_NO 时一次过滤出同时符合 init_date和direct_no列的数据。执行效果如下:

    如果是:b3=0,则oracle会在index_range_scan IDX_DATE_NO 时只滤出符合 init_date列的数据。执行效果如下:

     

      带有绑定变量的sql,oracle在选择执行计划的时候会相对保守,按照无法获知:b3输入值为前提条件,选择更为稳妥的只过滤init_date列的执行计划。在调优的过程中如果我们直接替换绑定变量成具体代入值,看到的执行计划只是雾里看花,花非花,雾非雾。不能表示最终的调优结果!

      所以在对带有绑定变量的sql调优时,要严格按照定义绑定变量、赋值、执行的原则获取调优过程中的执行计划。

          附上绑定变量值查询脚本,实际使用替换下sql_id。

          

    select * from (select case CC.datatype_string when 'NUMBER' THEN 'var ' || substr((name),2) || ' ' || datatype_string || ';'
            ELSE  'var ' || substr((name),2) || ' ' || datatype_string || ';' END as sqlbindss
            
            from (select *
               from dba_hist_sqlbind a
              where sql_id = 'gxbw9up2pw0fx'
              order by last_captured) CC
    where rownum <= (select count(*)
                        from dba_hist_sql_bind_metadata a
                       where sql_id = 'gxbw9up2pw0fx')
    union                 
    select case CC.datatype_string when 'NUMBER' then 'exec '||name||' := '|| value_string || ';'
            ELSE 'exec '||name||' := '''|| value_string || ''';'  END as sqlbindss
            from (select *
               from dba_hist_sqlbind a
              where sql_id = 'gxbw9up2pw0fx'
              order by last_captured) CC
    where rownum <= (select count(*)
                        from dba_hist_sql_bind_metadata a
                       where sql_id = 'gxbw9up2pw0fx')) order by 1 desc;     
    也许我已经迷失很久了,早已丢失了自己的影子。
  • 相关阅读:
    已经菜到不行了 PAT 1010. Radix (25)
    容斥 或者 单调栈 hihocoder #1476 : 矩形计数 和 G. Snake Rana 2017 ACM Arabella Collegiate Programming Contest
    React的Context的使用方法简介
    canvas的进阶
    canvas的基础入门
    CSS3 中弹性盒模型--容器的属性
    creat-react-app搭建的项目中按需引入antd以及配置Less和如何修改antd的主题色
    D3.js 动画 过渡效果 (V3版本)
    D3.js(v3)+react 制作 一个带坐标轴与比例尺的折线图
    D3.js 弦生成器(V3版本)
  • 原文地址:https://www.cnblogs.com/JcLevy/p/9182945.html
Copyright © 2011-2022 走看看