oracle 设置动态变量,数据库优化技术之Oracle数据库动态绑定变量

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

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

例如比拟如下SQL语句:

select * from table whereid=1与

my_id:=1

select * from table whereid=my_id

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

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

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

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

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

代码告终实例:

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

for i in 1..1000 loop

select count(*) into my_count from table wheremy_type=i;

ne.nexuscenter.com.cn

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

2、动态绑定变量

my_type:='type1';

my_count:=0;

my_sql:='select count(*) into :x from table where type = :y'

Execute Immediate my_sql into my_count using my_type;

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

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

【编辑推荐】

【责任编辑:赵鹏 TEL:(010)68476606】

点赞 0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值