Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1183330
  • 博文数量: 398
  • 博客积分: 10110
  • 博客等级: 上将
  • 技术积分: 4055
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-23 20:01
个人简介

新博客http://www.cnblogs.com/zhjh256 欢迎访问

文章分类

全部博文(398)

文章存档

2012年(1)

2011年(41)

2010年(16)

2009年(98)

2008年(142)

2007年(100)

我的朋友

分类: Oracle

2008-01-06 21:42:15

使用绑定变量

       为了理解榜定变量相对于性能的影响,必须首先知道在提交SQL到服务器进程后发生了什么?

       首先服务器哈希SQL看是否在库缓存中,假设没有则执行如下过程。

       下一步是解析SQL,将其分解为能够转换为执行计划的树结构,根据SQL的复杂程度,这个处理过程可能很多。下一步是优化器—RBO或者CBO,在近期的版本中Oracle推荐CBO,因为RBO对于优化执行计划不够聪明。

       如果使用CBO,它将会查看查询将使用的资源情况以及和对象相关的索引和约束,然后算出一个比较好的策略完成执行查询。这通常会耗费几微秒。

       所以提高性能的一个重要问题是尽可能使SQL具有相同的哈希值,使其能够在库缓存中找到以避免解析。关键是使用绑定变量:

begin

  :a := 'SYS';

end;

/

select table_name

  from dba_catalog

 where owner = :a;

begin

  :a := 'SYSTEM';

end;

/

select table_name

  from dba_catalog

 where owner = :a;

如果使用绑定变量,随后的语句就不需要解析优化建立计划步骤。

因此,在程序过程中要通常使用绑定变量,即使在动态SQL中也是如此,因为大多数查询只是条件的值不同而已。

阅读(513) | 评论(0) | 转发(0) |
0

上一篇:values借用密码

下一篇:关于null

给主人留下些什么吧!~~