首页 ┆ 网站地图 ┆ 在线留言 ┆ 游戏资讯 ┆ 资源下载 ┆ 端午节祝福 ┆ 迅雷在线影视
设为首页
加入收藏
联系我们
高级搜索
您当前的位置: 主页>数据库>ORACLE>Oracle sql性能优化调整规则汇总
Oracle sql性能优化调整规则汇总
来源: 发布时间:2008-02-18 发布人: 浏览: 人次   字体: [ ]  
Oracle sql 性能优化调整

  1. 选用适合的ORACLE优化器

  ORACLE的优化器共有3种:

  a. RULE (基于规则)

  b. COST (基于成本)

  c. CHOOSE (选择性)

  设置缺省的优化器,可以通过对init.ora文件中OPTIMIZER_MODE参数的各种声明,如RULE,COST,CHOOSE,ALL_ROWS,FIRST_ROWS . 你当然也在SQL句级或是会话(session)级对其进行覆盖。

  为了使用基于成本的优化器(CBO, Cost-Based Optimizer) , 你必须经常运行analyze 命令,以增加数据库中的对象统计信息(object statistics)的准确性。

  如果数据库的优化器模式设置为选择性(CHOOSE),那么实际的优化器模式将和是否运行过analyze命令有关。 如果table已经被analyze过, 优化器模式将自动成为CBO , 反之,数据库将采用RULE形式的优化器。

  在缺省情况下,ORACLE采用CHOOSE优化器,为了避免那些不必要的全表扫描(full table scan) , 你必须尽量避免使用CHOOSE优化器,而直接采用基于规则或者基于成本的优化器。

  2. 访问Table的方式ORACLE 采用两种访问表中记录的方式

  a. 全表扫描

  全表扫描就是顺序地访问表中每条记录。 ORACLE采用一次读入多个数据块(database block)的方式优化全表扫描。

  b. 通过ROWID访问表

  你可以采用基于ROWID的访问方式情况,提高访问表的效率, ROWID包含了表中记录的物理位置信息……ORACLE采用索引(INDEX)实现了数据和存放数据的物理位置(ROWID)之间的联系。 通常索引提供了快速访问ROWID的方法,因此那些基于索引列的查询就可以得到性能上的提高。

  3. 共享SQL语句

  为了不重复解析相同的SQL语句,在第一次解析之后, ORACLE将SQL语句存放在内存中。这块位于系统全局区域SGA(system global area)的共享池(shared buffer pool)中的内存可以被所有的数据库用户共享。 因此,当你执行一个SQL语句(有时被称为一个游标)时,如果它和之前的执行过的语句完全相同, ORACLE就能很快获得已经被解析的语句以及最好的执行路径。 ORACLE的这个功能大大地提高了SQL的执行性能并节省了内存的使用。

  可惜的是ORACLE只对简单的表提供高速缓冲(cache buffering) ,这个功能并不适用于多表连接查询。数据库管理员必须在init.ora中为这个区域设置合适的参数,当这个内存区域越大,就可以保留更多的语句,当然被共享的可能性也就越大了。当你向ORACLE 提交一个SQL语句,ORACLE会首先在这块内存中查找相同的语句。

  这里需要注明的是,ORACLE对两者采取的是一种严格匹配,要达成共享,SQL语句必须完全相同(包括空格,换行等)。

  共享的语句必须满足三个条件:

  A. 字符级的比较:

  当前被执行的语句和共享池中的语句必须完全相同。

  例如:

  SELECT * FROM EMP;

  和下列每一个都不同

  SELECT * from EMP;

  Select * From Emp;

  SELECT * FROM EMP;

  B. 两个语句所指的对象必须完全相同:

  例如:

用户 对象名 如何访问
Jack sal_limit private synonym
    Work_city public synonym
    Plant_detail public synonym
  Jill sal_limit private synonym
    Work_city public synonym
    Plant_detail table owner

  考虑一下下列SQL语句能否在这两个用户之间共享。

  C. 两个SQL语句中必须使用相同的名字的绑定变量(bind variables)

  例如:第一组的两个SQL语句是相同的(可以共享),而第二组中的两个语句是不同的(即使在运行时,赋于不同的绑定变量相同的值)

相 关 文 章   发布商链接
·如何彻底删除安装Oracle留下的东西
·oracle分析函数row_number的实例应用
·详细讲解Oracle数据库灾难防护的核心...
·oracle中分割字符串,并求最大值
·解决ORACLE被锁定的资源两法
·oracle9i客户端如何连接oracle10g数...
·使用type类型和存储过程来完成oracle...
·利用函数实现oracle行列转换
·Oracle数据库的四种启动方式介绍
·怎样有效提高Oracle 10G增量备份的速...
 §最新评论:(评论内容只代表网友观点,与本站立场无关!)
网名: 验证码:  【所有评论】【↑返回顶部
评 分: 12 345
评论内容:(不能超过500字,请自觉遵守互联网相关政策法规。[按 Ctrl+Enter 可直接提交]
注意:请勿在本站发布政治话题、色情及违反法律的内容。
IT知道网 声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。
推 荐 文 章
·Oracle数据库临时表的管理及...
·Oracle中to_date函数的详细使
·Oracle导致CPU进程100%原因及
·实例讲解对oracle进行简单树...
·Oracle服务费是如何计算的,以...
·如何完全清除Oracle
·ORACLE 10G分区表维护:全局...
·怎样有效提高Oracle 10G增量...
·Oracle数据库的四种启动方式...
·利用函数实现oracle行列转换
·使用type类型和存储过程来完...
·oracle9i客户端如何连接oracl...
·解决ORACLE被锁定的资源两法
·oracle中分割字符串,并求最...
·详细讲解Oracle数据库灾难防...
热 门 文 章
·Oracle内连接、外连接、右外...
·oracle分析函数row_number的...
·ORACLE使用中的常见、实用的...
·oracle9i客户端如何连接oracl...
·如何完全清除Oracle
·利用函数实现oracle行列转换
·导入、导出oracle数据库与复...
·ORACLE 10G分区表维护:全局...
·oracle中分割字符串,并求最...
·ORACLE实现字符串截取的功能
·几个方面入手oracle性能优化...
·使用type类型和存储过程来完...
·实例讲解对oracle进行简单树...
·Oracle中to_date函数的详细使...
·oracle数据库中如何修改字段...
网站首页 - 关于本站 - 加入收藏 - 网站地图 - 友情连接 - 在线留言 - 联系我们 - 返回顶部
Copyright © 2007 IT知道网.[冀ICP备07026896号]. All Rights Reserved .