`
insertyou
  • 浏览: 864753 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

绑定变量及其优缺点

 
阅读更多

绑定变量是Oracle解决硬解析的首要利器,能解决OLTP系统中library cache的过度耗用以提高性能。然刀子磨的太快,使起来锋利,却容
易折断。凡事皆有利弊二性,因地制宜,因时制宜,全在如何权衡而已。本文讲述了绑定变量的使用方法,以及绑定变量的优缺点、使用场合。

一、绑定变量

提到绑定变量,就不得不了解硬解析与软解析。硬解析简言之即一条SQL语句没有被运行过,处于首次运行,则需要对其进行语法分析,语
义识别,跟据统计信息生成最佳的执行计划,然后对其执行。而软解析呢,则是由于在library cache已经存在与该SQL语句一致的SQL语句文本
、运行环境,即有相同的父游标与子游标,采用拿来主义,直接执行即可。软解析同样经历语法分析,语义识别,且生成hash value ,接下来
在library cache搜索相同的hash value ,如存在在实施软解析。有关更多的硬解析与软解析以及父游标,子游标请作如下参考:

有关硬解析与软解析,请参考:Oracle 硬解析与软解析
有关父游标、子游标,请参考:父游标、子游标与共享游标

绑定变量
首先其实质是变量,有些类似于我们经常使用的替代变量,替代变量使用&占位符,只不过绑定变量使用:
替代变量使用时为 &variable_para,相应的绑定变量则为 :bind_variable_para
通常一个SQL语句包含动态部分和静态部分,占位符实质是SQL语句中容易发生变化的部分,通常为其条件或取值范围。动态部分在一般情
况下(数据倾斜除外),对执行计划的生成的影响是微乎其微的。故同一SQL语句不同的动态部分产生的执行计划都是相同的。

二、绑定变量的使用
1、在SQLPlus中使用绑定变量

2、PL/SQL块中使用绑定变量

3、在存储过程或包中使用绑定变量

4、在动态SQL中是使用绑定变量


三、绑定变量的优缺点及使用场合
优点:
可以在library cache中共享游标,避免硬解析以及与之相关的额外开销
在大批量数据操作时将呈数量级来减少闩锁的使用,避免闩锁的竞争

缺点:
绑定变量被使用时,查询优化器会忽略其具体值,因此其预估的准确性远不如使用字面量值真实,尤其是在表存在数据倾斜(表上的数
据非均匀分布)的列上会提供错误的执行计划。从而使得非高效的执行计划被使用。

使用场合:
OLTP
在OLTP系统中SQL语句重复执行频度高,但处理的数据量较少,结果集也相对较小,尤其是使用表上的索引来缩小中间结果集,其
解析时间通常会接近或高于执行时间,因此该场合适合使用绑定变量。

OLAP
在OLAP系统中,SQL语句执行次数相对较少,但返回的数据量较大,因此多数情况下倾向于使用权标扫描更高效,其SQL语句执行时
间远高于其解析时间,因此使用绑定变量对于总响应时间影响不大。而且增加生成低效执行计划的风险。即在在OLAP系统中使用字
面量的性能高于使用绑定变量。

注意:
对于实际的数据库对象,如(表,视图,列等),不能使用绑定变量替换,只能替换字面量。如果对象名是在运行时生成的,则需要对其
用字符串拼接,同时,sql只会匹配已经在共享池中相同的对象名。

四、相关参考

Oracle 硬解析与软解析
父游标、子游标与共享游标
启用用户进程跟踪
PL/SQL --> 动态SQL
PL/SQL --> 动态SQL的常见错误

分享到:
评论

相关推荐

    浅谈oracle 数据库的绑定变量特性及应用

    oracle 数据库的绑定变量特性及应用

    Python延迟绑定问题原理及解决方案

    延迟绑定出现在闭包问题中。下面我们看一个闭包的例子: def (n): def mul(x): return n*x return mul double = gen_mul(2) doubled_value = double(6) 可以看出满足闭包的几点: 有内部函数 内部函数引用了...

    sql总结.doc

    缺点:滥用触发器会造成数据库及应用程序的维护困难。 (5)触发器的两种形式(行级触发器,表级触发器) 1.在语法上,行级触发器就多了一句话:for each row 2.在表现上,行级触发器,在每一行的数据进行操作的...

    数据库概念的复习总结

    6、关系数据模型的优缺点 7、数据库系统的三级模式结构: 模式, 外模式,内模式 8、候选码、主码、主属性、非主属性的概念 9、实体完整性规则: 10、关系三类完整性约束 11、等值连接、自然连接区别与联系 12、SQL...

    关系型数据库性能体系设计和效率提升.docx

    7.6 使用绑定变量,降低高硬解析 21 7.7 选择最有效率的表名顺序 21 7.8 关注WHERE子句中的连接顺序 21 7.9 用EXISTS替代IN 22 7.10 用表连接替换EXISTS 23 7.11用EXISTS替换DISTINCT 24 7.12 尽量用union all替换...

    精通sql结构化查询语句

    12.5.1 创建默认值 12.5.2 默认值的绑定与松绑 12.6 小结第5篇 T-SQL高级编程篇第13章 存储过程 13.1 存储过程概述 13.1.1 存储过程的基本概念 13.1.2 存储过程的优缺点 13.2 存储过程中常用的流控制语句 13.2.1 IF....

    AST-Java-logger

    物流及运作方式 该项目是在IntelliJ IDEA 2019.2.1中创建和开发的。 经过sbt 1.3.2测试并运行。 要运行单元测试,请使用sbt clean compile test 。 要运行该程序,请使用sbt clean compile run 。 这样做可能会...

    net学习笔记及其他代码应用

    缺点: 增加成本。 12.在下面的例子里 using System; class A { public A() { PrintFields(); } public virtual void PrintFields(){} } class B:A { int x=1; int y; public B() { y=-1; } ...

    精通SQL 结构化查询语言详解

    4.3.2 视图的优缺点  4.4 视图的创建与销毁  4.4.1 基本创建语法  4.4.2 创建简单的视图  4.4.3 利用视图简化表的复杂连接  4.4.4 利用视图简化复杂查询 4.4.5 视图的销毁  4.4.6 使用视图的几点原则...

    精通SQL--结构化查询语言详解

    4.3.2 视图的优缺点 74 4.4 视图的创建与销毁 75 4.4.1 基本创建语法 75 4.4.2 创建简单的视图 75 4.4.3 利用视图简化表的复杂连接 78 4.4.4 利用视图简化复杂查询 79 4.4.5 视图的销毁 81 4.4.6 使用视图的...

    Access+2000中文版高级编程

    12.3 创建及完善简单的数据访问页 369 12.3.1 数据访问页的字段列表 369 12.3.2 添加超级链接 370 12.3.3 在数据访问页中使用表达式 374 12.3.4 使用绑定的组合框和列表框 375 12.3.5 使用主题格式化 378 ...

    Access 2000中文版高级编程(part1)

    12.3 创建及完善简单的数据访问页 369 12.3.1 数据访问页的字段列表 369 12.3.2 添加超级链接 370 12.3.3 在数据访问页中使用表达式 374 12.3.4 使用绑定的组合框和列表框 375 12.3.5 使用主题格式化 378 12.3...

    C#编程经验技巧宝典

    24 <br>0050 using关键字的用法 24 <br>0051 变量的作用域 25 <br>2.5 其他 26 <br>0052 有效使用this对象 26 <br>0053 如何声明变量 26 <br>0054 如何声明相同类型的多个变量 26 ...

    JAVA基础课程讲义

    AWT的缺点 214 为什么还需要学习AWT? 215 AWT各组件的整体关系 215 组件 215 容器 216 布局管理器 218 为什么需要布局管理器? 218 FlowLayout布局管理器 218 BorderLayout布局管理器 219 CardLayout布局管理器 220 ...

    C/C++笔试题(附答案,华为面试题系列)

    答:服务器端:socker()建立套接字,绑定(bind)并监听(listen),用accept() 等待客户端连接。 客户端:socker()建立套接字,连接(connect)服务器,连接上后使用send()和recv( ),在套接字上写读数据,直至...

    Android C++高级编程:使用NDK_Onur Cinar, 于红PDF电子书下载 带书签目录 完整版

    7.2.3 原生代码使用Java线程的优缺点 167 7.3 POSIX线程 168 7.3.1 在原生代码中使用POSIX线程 168 7.3.2 用pthread_create创建线程 168 7.3.3 更新示例应用程序以使用POSIX线程 169 7.3.4 执行POSIX线程示例 ...

    asp.net知识库

    利用反射来查看对象中的私有变量 关于反射中创建类型实例的两种方法 ASP.Net应用程序的多进程模型 NET委托:一个C#睡前故事 [推荐] - [原创] Microsoft .NET策略及框架概述 卸载Class? Web Form 窗体 如何实现web...

    SQL.Server.2008编程入门经典(第3版).part1.rar

    索引的优缺点 锁和死锁对系统性能的各种影响 理解触发器及其使用方式 《SQL Server 2008编程入门经典(第3版)》读者对象 《SQL Server 2008编程入门经典(第3版)》适合于希望全面了解数据库设计概念和学习SQL的开发...

    SQL.Server.2008编程入门经典(第3版).part2.rar

    索引的优缺点 锁和死锁对系统性能的各种影响 理解触发器及其使用方式 《SQL Server 2008编程入门经典(第3版)》读者对象 《SQL Server 2008编程入门经典(第3版)》适合于希望全面了解数据库设计概念和学习SQL的开发...

    SQLServer2008查询性能优化 2/2

    内容涵盖了数据库应用系统中各种性能瓶颈的表现形式及其发生的根源和解决方法,从硬件瓶颈到查询、索引设计以及数据库管理等,贯穿了数据库系统知识的各个方面。最后以一个实际的工作负载将所有技巧联系起来,并且...

Global site tag (gtag.js) - Google Analytics