Oracle Oracle语句优化53个规则详解(1) Oraclesql 性能优化调整 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-BasedOptimizer),你必须经常运行analyze命令,以增 加数据库中的对象统计信息(objectstatistics)的准确性。 如果数据库的优化器模式设置为选择性(CHOOSE),那么实际的优化器模式将和是否运行过analyze 命令有关。如果table已经被analyze过,优化器模式将自动成为CBO,反之,数据 ### Oracle语句优化53个规则详解 #### 一、选用适合的ORACLE优化器 在Oracle数据库中,语句优化对于提升查询性能至关重要。优化器的选择直接影响到查询计划的质量,进而影响整体性能。 **1.1 ORACLE的优化器类型** Oracle提供了三种主要的优化器类型: - **RULE(基于规则)**:这是一种较老的优化方法,它根据固定的规则来确定执行计划。这种方法简单但不够灵活,可能无法适应复杂的查询场景。 - **COST(基于成本)**:此优化器根据表的统计信息来估算各种执行计划的成本,并选择成本最低的那个。这种方式更现代且更为智能,能够根据实际情况做出更好的选择。 - **CHOOSE(选择性)**:这是一种动态选择优化器的方式,它根据是否有准确的统计信息来决定使用COST还是RULE。 **1.2 设置优化器** 可以通过修改`init.ora`文件中的`OPTIMIZER_MODE`参数来设置默认的优化器类型,例如: - `RULE` - `COST` - `CHOOSE` - `ALL_ROWS` - `FIRST_ROWS` 此外,也可以在SQL语句或会话级别覆盖这些设置。为了确保基于成本的优化器(CBO)的有效性,需要定期运行`ANALYZE`命令来更新数据库对象的统计信息。这有助于提高执行计划的准确性。 **1.3 CHOOSE优化器的行为** 如果设置了CHOOSE优化器,则实际使用的优化器取决于表是否经过了`ANALYZE`。如果表已分析,将使用CBO;否则,将使用RULE优化器。在默认情况下,Oracle倾向于使用CHOOSE优化器。为了避免不必要的全表扫描,建议直接指定使用RULE或COST优化器。 #### 二、访问Table的方式 Oracle提供了两种访问表中记录的主要方式: **2.1 全表扫描** 全表扫描涉及按顺序访问表中的每一行。Oracle通过一次性读取多个数据块来优化这一过程。全表扫描适用于小表或当索引扫描成本较高时的情况。 **2.2 通过ROWID访问表** ROWID是一种特殊类型的标识符,用于存储记录的物理位置信息。通过索引可以快速获取ROWID,从而实现高效的记录访问。这种访问方式通常比全表扫描更快,尤其是在大型表上。 #### 三、共享SQL语句 为了减少重复解析相同的SQL语句,Oracle会在系统全局区(SGA)的共享池中缓存已经解析过的SQL语句。这有助于提高性能并减少内存使用。但是,只有简单的单表查询会被高速缓存,多表连接查询不会。 **3.1 共享语句的条件** 为了让SQL语句能够共享,必须满足以下条件: - **字符级的比较**:当前执行的SQL语句必须与共享池中的语句完全一致,包括空格和换行等细节。 - **对象一致性**:SQL语句引用的对象必须完全相同。例如,私有同义词不能跨用户共享。 #### 四、总结 以上介绍了Oracle语句优化中的一些关键概念和技术。通过合理选择优化器、高效访问表记录以及充分利用SQL语句的共享机制,可以显著提高Oracle数据库的应用性能。在实际操作中,还需要结合具体的应用场景进行细致的调优工作。例如,在设置`OPTIMIZER_MODE`参数时,要考虑数据库的具体负载特性;在选择访问方式时,要考虑到数据量的大小等因素。通过这些策略的应用,可以有效地提升Oracle系统的性能表现。
剩余24页未读,继续阅读
- rockeyson2012-11-27oracle优化必看。
- 粉丝: 47
- 资源: 387
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助