数据库优化技术之Oracle数据库动态绑定变量

数据库 Oracle
本文主要介绍了Oracle数据库动态绑定变量的实现方法,还介绍了硬解析与软解析的差异,并给出了实例的说明,希望能够对您有所帮助。

我们知道,分享池(shared pool)是系统大局区(System Global Area ,SGA)中一个极其重要的分享内存构造。然而Oracle数据库将已解析、已编译的SQL 连同其他内容存储在这里。可是已解析,已编译的SQL要想告终其复用有一个前提,要求开发人员在大多数情形下都会利用绑定变量。本文我们主要就介绍了一些Oracle数据库绑定变量的知识,下面我们就开始介绍。

绑定变量(bind variable)是查询中的一个占位符。

例如比拟如下SQL语句:

  1. select * from table where id = 1与  
  2.  
  3. my_id :1 
  4.  
  5. select * from table where id = my_id 

对于***个SQL语句,在查询中利用直接量(常量),那么每个查询都将是一个崭新的查询,在数据库看来过去从未见过,定然对查询举行解析、限量(命名解析)、平安性察看、优化等。容易地讲,即便你厉行的每条不同的语句都要在厉行时举行编译。(解析包括有硬编码变量的语句称为硬解析

而对于第二个查询利用了一个绑定变量my_id,变量值在查询厉行时供给。这个查询只编译顺次,随后会把查询计划存储在一个分享池(库缓存)中,以便尔后获得和重用这个查询计划,(重用已解析的查询计划称为软解析)。

软解析与硬解析之间的差异重要体目前以下几个方面:

1、与软解析相比硬解析必需的工夫更长,而且要花费更多的资源,硬解析会收缩系统能扶持的用户数。

2、硬解析一个查询时,数据库会更伙计夫地挪借一种低级串行穿戴备,这称为闩(latch),这些闩能防御Oracle分享内存中的数据构造不会同时被两个历程修正,而且万一有人正在修正数据构造,则不批准另外的人再来读取。对这些数据构造加闩的工夫越长、越频繁,排队期待闩的历程就越多,期待队列也越长。你可能开始垄断贵重的资源。有时你的计算机显明利用不足,然而数据库中的所有利用都运行得极其慢。构成这种假象的起因可能是有人割据着某种串行穿戴备,而其他期待串行穿戴备的人开始排队,因而你无法全速运行。数据库中凡是有一个利用出现不佳,就会严重地波及所有其他利用的功能。万一只有一个薄利用没利于用绑定变量,那么即便其他利用原本设计得很好,能妥本地将已解析的SQL放在分享池中以备重用,但因为这个薄利用的存在,过一段工夫就会从分享池中剔除已存储的SQL。这就使得这些设计贴切的利用也定然再次硬解析SQL。

代码告终实例:

1、oracle自己默认告终的绑定变量:

  1. for i in 1..1000 loop  
  2.  
  3. select count(*) into my_count from table where my_type = i;  
  4.  
  5. ne.nexuscenter.com.cn<end loop; 

在上面的情形,Oracle会自己绑定变量,即,万一参数保留在一个数组中,select语句放在一个循环中,select 语句只会编译顺次。

2、动态绑定变量

  1. my_type:='type1';  
  2.  
  3. my_count :0;  
  4.  
  5. my_sql:='select count(*) into :x from table where type = :y' 
  6.  
  7. Execute Immediate my_sql into my_count using my_type; 

然而这段代码包括额外的String,并非全面必需。

关于Oracle数据库优化的知识就介绍到这里了,如果您想了解更多的关于Oracle数据库的知识,可以看一下这里的文章:http://database.51cto.com/oracle/,相信一定能够带给您收获的!

【编辑推荐】

  1. Oracle数据库常见问题及解决方案大全
  2. 用于存储xml的数据库之DBXML简单介绍
  3. PL/SQL Developer导入导出数据库方法及说明
  4. Oracle 11g即时客户端在Windows系统上的配置
  5. Oracle 11g客户端在Linux系统上的配置步骤详解
责任编辑:赵鹏 来源: 网易博客
相关推荐

2011-05-18 09:39:19

Oracle数据库性能优化

2010-05-10 15:50:39

Oracle数据库性能

2011-08-02 13:37:17

2011-05-20 10:30:20

ORACLE数据库性能优化

2009-11-18 18:16:17

Oracle数据库优化

2014-06-10 15:07:19

Oracle数据库优化

2010-04-21 14:00:48

Oracle数据库

2011-05-17 15:02:15

ORACLE数据库备份

2014-07-18 09:33:53

数据库数据库优化

2019-01-16 14:20:42

2013-09-17 10:32:08

Android性能优化数据库

2011-03-31 09:19:54

数据库优化

2011-05-19 10:29:40

数据库查询

2010-04-09 16:51:24

Oracle数据库

2010-04-09 15:08:17

Oracle 数据库性

2023-08-28 10:42:22

数据库Oracle

2023-07-12 08:55:16

PawSQL数据库

2009-09-02 18:52:38

Oracle数据库并行

2011-03-10 13:24:26

2011-05-26 10:30:12

Oracle数据库约束
点赞
收藏

51CTO技术栈公众号