zoukankan      html  css  js  c++  java
  • 关于CURSOR_sharing的分析

    今天看到SQL优化的教程,在讲语句优化的时候提到的绑定变量和这个参数。

    为此是特别做了下研究。

    cursor_sharing是从8I开始提出的在服务器端处理SQL绑定的参数,他由个值

    force,similar,exact

    force表示强行对SQL语句进行变量绑定,如

    select * from mytest where name = 'jack';

    SQL语句传到server端后,会生成select * from mytest where name =:"SYS_B_0" 的SQL版本,后面在运行相同的查询,但name字段的传值不同,也会利用前面生成的查询计划,这个参数在一些没有绑定变量的应用程序里面会带来很好的性能收益,避免了过度的硬解析,但也有弊病,因为随着传入数据的不同,需要执行不同的查询方案,比如走full scan还是走index range scan,可能有时候会运用错误的方案进行查询,

    exact表示每个SQL语句应该精确匹配,包括大小写,空格等,相同的才可能被重用

    similar是上面两者的结合体,如果查询的sarg字段存在柱状图信息,则随着传值的不同,每次都要硬解析,此时等同与exact,如果不存在柱状图信息,则强行绑定,等同与force(柱状图描述了相关字段的数据分布,这个对索引的选用有很大影响)

    一个好的应用程序不应该使用force选项

    SQL> show parameter cursor

    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------
    cursor_sharing                       string      EXACT
    cursor_space_for_time                boolean     FALSE
    open_cursors                         integer     300
    session_cached_cursors               integer     20
    SQL>

    根据标记可以看出。默认是EXACT,也就是不启用共享。

    其实这个参数用的是不得已而为之的,因此在修改这个参数的时候一定要提前做好测试,

  • 相关阅读:
    利用JS实现的根据经纬度计算地球上两点之间的距离
    html中meta标签作用详解
    Jquery Highcharts 参数配置说明
    Properties类的使用示例
    利用数据库模版创建方便部署的.Net项目调试环境
    ASP.NET修改Web.Config文件(对xml的操作)
    创建动态数据输入用户界面
    DataGrid相关知识总结(收集自各位老大处)
    在C#.net中如何操作XML
    C#中使用反射的性能分析
  • 原文地址:https://www.cnblogs.com/wbzhao/p/2424303.html
Copyright © 2011-2022 走看看