`

Oracle 绑定变量 详解

 
阅读更多


绑定变量对Oracle 的性能来说是非常重要的,之前有整理一些理论知识:

       Oracle 绑定变量 详解

       http://blog.csdn.net/tianlesoftware/archive/2010/09/01/5856430.aspx

       Event 10053 执行计划 绑定变量 Bind peeking

       http://blog.csdn.net/tianlesoftware/archive/2010/04/29/5544307.aspx


       在这里演示一下绑定变量的例子, 注意,绑定变量对索引选择性不好的列不适用,可能会导致错误的执行计划,从而影响SQL 效率。



有关索引的选择性,参考:

       Oracle 索引的维护

       http://blog.csdn.net/tianlesoftware/archive/2010/06/19/5680706.aspx




示例



SQL> create table t1(c1 number,c2 number,c3 number,c4 number);

Table created.



SQL> declare

  2  i number;

  3  j number;

  4  str varchar2(200);

  5  begin

  6  i :=1;

  7  j :=2;

  8  str :='insert into t1 values(:x,:y,:x,:y)';

  9  execute immediate str using i,j,i,j;

10  end;

11  /



PL/SQL procedure successfully completed.



SQL> select * from t1;



C1         C2         C3         C4

---------- ---------- ---------- ----------

1          2          1          2



这里是绑定变量的一个简单应用, 绑定变量起到占位的作用.



进一步的测试:ORACLE系统本身是能够对变量做绑定的。



SQL> set timing on

SQL> declare       

  2  i number;

  3  begin

  4  for i in 1..1000 loop

  5     insert into t1 values(i,i+1,i+2,i+3);

  6  end loop;

  7  end;

  8  /



PL/SQL procedure successfully completed.

Elapsed: 00:00:00.28



SQL> select count(*) from t1;

  COUNT(*)

----------

      1001



Elapsed: 00:00:00.01



       在这段代码块的执行过程中,ORACLE会自动将其中的变量进行绑定。 也就是说:这段代码执行了1000次 insert 语句,但是每次发出去的语句都是一样的,这1000次SQL的hash 值是一样的,他们的执行计划也是一样的。





对上述代码进行修改:



SQL> declare

  2     i number;

  3     str varchar2(200);

  4  begin

  5     for i in 1..1000 loop

  6     str:='insert into t1 values ('||to_char(i)||','||to_char(i)||'+1,'||to_char(i)||'+2,'||to_char(i)||'+3)';

  7     execute immediate str;

  8  end loop;

  9  end;

10  /



PL/SQL procedure successfully completed.



Elapsed: 00:00:02.88



这段代码没有自动使用绑定变量,所以时间上明显长。 我们使用绑定变量看看。



SQL> declare

  2     i number;

  3     str varchar2(200);

  4  begin

  5     for i in 1..1000 loop

  6     str:='insert into t1 values (:i,:i+1,:i+2,:i+3)';

  7     execute immediate str using i,i,i,i;

  8  end loop;

  9  end;

10  /



PL/SQL procedure successfully completed.



Elapsed: 00:00:00.19



使用绑定变量后,时间明显要少很多。

转:http://blog.csdn.net/tianlesoftware/article/details/6324243
分享到:
评论

相关推荐

    oracle执行计划详解

    oracle 执行计划详解 Oracle 执行计划是数据库性能调整的关键部分,对于想要学习 Oracle 数据库的朋友非常有帮助。下面是Oracle 执行计划的背景知识和重要概念。 共享 SQL 语句 Oracle 将 SQL 语句及解析后得到的...

    oracle 执行计划 详解

    "Oracle 执行计划详解" Oracle 执行计划是数据库性能优化的关键。为了更好地理解和优化 Oracle 数据库的执行计划,我们需要了解执行计划的生成过程、优化方法和执行计划的解读方法。 执行计划生成过程 执行计划的...

    oracle biee变量总结

    ### Oracle BIEE 变量总结与应用 #### 一、引言 Oracle Business Intelligence Enterprise Edition (BIEE) 是一款强大的商业智能工具,能够帮助组织机构从数据中提取价值并做出更好的决策。在 BIEE 的开发过程中,...

    ORACLE的执行计划详解文档

    本文档详细解释了 ORACLE 的执行计划背景知识,包括共享 SQL 语句、执行计划的存储和共享、绑定变量的使用、执行计划的生成和共享、执行计划的优化等方面的内容。 一、共享 SQL 语句 ORACLE 对相同的 SQL 语句进行...

    Oracle数据库优化详解

    - SQL书写规则,比如绑定变量的使用,以及避免在where条件中使用变量判断等。 2. CBO优化案例分析 - 分析了不同的案例背景和系统配置,以及测试方法。 - 提供了SQL调优的思路和方法,包括面对数据分布不均匀、...

    超酷30个Oracle语句优化规则详解

    - **绑定变量的影响**:如果两个SQL语句中使用了不同的绑定变量名称,即使在运行时这些变量的实际值相同,Oracle也不会认为这两个语句是相同的,因此不会共享执行计划。 #### 总结 通过合理选择优化器模式、利用...

    Oracle语句优化53个规则详解

    - 使用相同的绑定变量名称:即使绑定变量的实际值不同,也必须使用相同的变量名。 - **实例说明**: - 如果两个用户分别使用私有同义词`sal_limit`来访问不同的对象,那么他们的SQL语句不会被共享。 - 如果两个...

    oracle语句优化详解

    ### Oracle语句优化详解 #### 一、Oracle优化器模式的理解与选择 Oracle数据库通过不同的优化器模式来决定执行计划的选择。这些模式包括基于规则的优化(RULE)、基于成本的优化(CBO)以及自动选择(CHOOSE)。 ...

    30个Oracle语句优化规则详解

    ### Oracle语句优化规则详解 #### 一、选用适合的Oracle优化器 Oracle数据库提供了三种主要的优化器:基于规则的优化器(RULE)、基于成本的优化器(COST)和选择性优化器(CHOOSE)。优化器的选择直接影响到SQL...

    Oracle SQL语句优化53个规则详解

    对于绑定变量,必须使用相同名称的绑定变量才能确保SQL语句的共享,即使在运行时,这些变量被赋予了相同的值。 文档中也提到了绑定变量的重要性。绑定变量是在SQL语句中使用占位符代替直接在查询中指定的值,这样...

    Python使用cx_Oracle模块操作Oracle数据库详解

    例如,插入数据时,可以使用变量绑定的方式执行INSERT语句: ```python sql = "INSERT INTO table_name (column1, column2) VALUES (:1, :2)" params = ('value1', 'value2') cursor.execute(sql, params) ``` 这段...

    30个Oracle语句优化规则详解.doc

    当多个查询具有相同的结构但不同参数时,使用绑定变量可以使Oracle重用解析计划。例如,动态SQL和存储过程中的参数化查询应尽可能使用绑定变量。 5. **缓存与高速缓冲**: Oracle使用缓存来加速数据访问。共享池中...

    高清完整版 Oracle 高性能SQL引擎剖析SQL优化与调优机制详解

    例如,合理使用索引、避免全表扫描、使用绑定变量等。其次是SQL语句的结构调整,例如通过重写SQL语句来减少中间结果集的生成,降低资源消耗。 再者,要熟悉Oracle的执行计划分析。执行计划是SQL语句性能的蓝图,...

    Oracle语句优化53个规则详解.doc

    3. **绑定变量一致**:SQL语句中使用的绑定变量名称也必须完全相同才能共享。 通过以上方法,不仅可以提高Oracle数据库的查询性能,还能有效利用系统资源,降低维护成本。对于大型数据库应用而言,合理设置优化器...

    用VC++开发Oracle数据库应用程序详解

    【VC++开发Oracle数据库应用程序详解】 在开发Oracle数据库应用程序时,Visual C++(简称VC)是一种常见的客户端开发工具,尤其适合构建与Oracle数据库交互的应用。本文主要探讨两种使用VC++开发Oracle应用程序的...

    oracle详解课件pp格式t

    优化处理器管理是提升数据库性能的关键,包括合理设置并行度、使用绑定变量等策略。 3. **存储器管理**:Oracle数据库采用了一种称为SGA(系统全局区)的内存结构,其中包含了缓存数据、解析缓冲区、重做日志缓冲区...

    Oracle高性能SQL引擎剖析 SQL优化与调优机制详解

    4. **绑定变量**:使用绑定变量可以避免硬解析,提高SQL语句的重用率,从而减少解析开销和内存占用。 5. **并行查询**:Oracle支持并行查询,将大任务分解为多个子任务并发执行,以加速处理速度。但过度的并行可能...

    Oracle DBA调优技术学习笔记

    Oracle 12c-优化 Hint详解.pdf Oracle 12c-优化 Oracle 索引技术.pdf Oracle 12c 执行计划.pdf ...Oracle 12c 使用绑定变量 VS 不使用绑定变量.pdf Oracle 12c 自动工作负载信息库AWR.pdf Oracle 12c 常用SQL.pdf

Global site tag (gtag.js) - Google Analytics