绑定变量对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只需要软分析一次,而不需要每次都进行硬分析,从而提高了数据库的性能。 需要注意的是,绑定变量可以在PL/SQL过程中使用,例如: Declare i number; Begin i := 1; Select ...
oracle 执行计划详解 Oracle 执行计划是数据库性能调整的关键部分,对于想要学习 Oracle 数据库的朋友非常有帮助。下面是Oracle 执行计划的背景知识和重要概念。 共享 SQL 语句 Oracle 将 SQL 语句及解析后得到的...
本文档详细解释了 ORACLE 的执行计划背景知识,包括共享 SQL 语句、执行计划的存储和共享、绑定变量的使用、执行计划的生成和共享、执行计划的优化等方面的内容。 一、共享 SQL 语句 ORACLE 对相同的 SQL 语句进行...
"Oracle 执行计划详解" Oracle 执行计划是数据库性能优化的关键。为了更好地理解和优化 Oracle 数据库的执行计划,我们需要了解执行计划的生成过程、优化方法和执行计划的解读方法。 执行计划生成过程 执行计划的...
16. 使用绑定变量避免参数嗅探:参数嗅探可能导致优化器选择错误的执行计划,绑定变量可以防止这种情况。 以上只是部分优化规则,实际优化过程中还需要结合具体情况进行调整。理解这些规则并灵活应用,能有效提升...
然而,共享的条件非常严格,要求SQL语句在字符级别、对象引用及绑定变量名称上完全一致。这包括对空格、换行符的敏感性,以及私有同义词和公共同义词的区别,以及不同用户对相同对象的不同权限。 为了充分利用SQL...
优化处理器管理是提升数据库性能的关键,包括合理设置并行度、使用绑定变量等策略。 3. **存储器管理**:Oracle数据库采用了一种称为SGA(系统全局区)的内存结构,其中包含了缓存数据、解析缓冲区、重做日志缓冲区...
4. **绑定变量**:使用绑定变量可以避免硬解析,提高SQL语句的重用率,从而减少解析开销和内存占用。 5. **并行查询**:Oracle支持并行查询,将大任务分解为多个子任务并发执行,以加速处理速度。但过度的并行可能...
Oracle 12c-优化 Hint详解.pdf Oracle 12c-优化 Oracle 索引技术.pdf Oracle 12c 执行计划.pdf ...Oracle 12c 使用绑定变量 VS 不使用绑定变量.pdf Oracle 12c 自动工作负载信息库AWR.pdf Oracle 12c 常用SQL.pdf
以下是针对“Oracle 语句优化30个规则详解”的部分内容进行的详细解读: 1. **优化器选择**: - Oracle 提供了三种优化器:RULE(基于规则)、COST(基于成本)和CHOOSE(选择性)。COST是最常用的选择,因为它...
理解索引、表分区、绑定变量和缓存策略对性能的影响至关重要。 4. **备份与恢复**:Oracle提供RMAN( Recovery Manager)进行数据库备份和恢复操作。DBA应掌握如何制定备份策略,执行完整备份、增量备份和差异备份...
7. 使用绑定变量:绑定变量可以减少解析次数,提高SQL执行效率,尤其是在循环或批量处理中。 8. 分析和更新统计信息:定期分析表和索引,确保优化器有最新的统计信息来制定执行计划。 9. 适当调整初始化参数:如...
1. 使用绑定变量:绑定变量可以避免硬解析,提高SQL执行效率。 2. 分析与重构:定期分析性能问题,对SQL语句进行重构,以适应系统变化。 总结,Oracle语句优化涉及多方面,包括索引、连接、子查询、函数、游标、...
例如,通过使用绑定变量可以避免硬解析,提高SQL执行效率;利用 Explain Plan 分析SQL执行计划,识别潜在的性能瓶颈;使用索引覆盖来减少I/O操作,提升查询速度。 其次,数据库优化不仅限于SQL层面,还包括数据库...
7. **绑定变量和返回值**:`cx_Oracle`支持绑定变量到SQL语句中,这有助于防止SQL注入攻击并提高性能。同时,还可以设置输出变量来接收SQL语句的返回值。 8. **异常处理**:`cx_Oracle`定义了一系列的异常类,如`...
31. **使用绑定变量避免全表扫描**:Oracle无法使用索引时,绑定变量可能避免全表扫描。 32. **考虑使用索引组织表**:对于只读或更新较少的表,IO性能优异。 33. **优化临时表**:合理使用临时表,减少内存和磁盘...