ORACLE 优化方式
Oracle的优化器有两种优化方式,即基于规则的优化方式(rule-based optimization 简称RBO)和基于代价的优化方式(cost-based optimization 简称CBO),在oralce 8以及以后的版本,Oracle强烈推荐CBO的方式。 ? RBO方式:oralce在分析语句时所遵循的是oralce内部预定的一些规则,比如我们常见的,where子句中有索引时去走索引。 ? CBO方式:它是看语句的代价,这里的代价主要是CPU和内存。优化器在判断是否使用这种方式时,主要参照的是表和索引的统计信息。统计信息给出表的大小、有多少行、每行的长度等信息。这些信息起初在库内是没有的,要做analyze才出现的,很多时候过期的统计信息会另优化器做出错误的执行计划,因此需要及时更新统计信息。 注意:走索引不一定是最优的,比如一张表只有两行数据,一次I/O就可以完成表的检索,而此时走索引则需要两次I/O,这时全表扫描(full scan)最好。 优化模式包括rule、choose、first row、all row这四种方式: ? Rule:基于规则的方式。 ? Choose:默认情况下Oracle走的便是这种模式,指的是一个表或者索引有统计信息,则走CBO的方式,如果表或者索引没有统计信息,表又不是特别小,而且相应的列有索引时,那么走索引,也就是RBO方式。 ? First rows:它与choose方式是类似的,所不同的是当一个表有统计信息时,他将以最快的方式返回查询的最先几行,从总体上减少响应的时间。 ? All rows:也就是我们所说的cost的方式,当一个表有统计信息时,它将以最快的方式返回表的所有行,从总体上提高查询的吞吐量,没有统计则走RBO的方式。 设定选择哪种优化模式 ① Instance级别 可以通过在init.ora文件中设定OPTIMIZER_MODE=RULE/CHOOSE/FIRST_ROWS/ALL_ROWS设定级别,如果没设定 OPTIMIZER_MODE参数则默认用的是Choose。 使用spfile的情况,使用下面的语句: alter system set optimizer_mode=choose scope=spfile; ② Sessions级别 通过 ALTER SESSION SET OPTIMIZER_MODE=RULE/CHOOSE/FIRST_ROWS/ALL_ROWS;来设定。 ③ 语句级别 用Hint来指定。 当一个表的某个字段有索引,但是执行计划却没有走索引,有以下几个原因: ① 优化模式是all rows方式; ② 表做过analyze,有统计信息; ③ 表很小,Oracle认为没有必要走索引。 优化器的优化方式:http://blog.sina.com.cn/s/blog_46a30a740102w4in.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 白盒测试 第四代白盒测试方法
- ruby-on-rails – 具有隔离命名空间的Rails引擎共享布局
- Flex一个RemoteObject调用JAVA对象里面的多个方法(转)
- SQLite学习手册(目录)
- 如何在react-native-mapbox-gl中运行时显示/隐藏栅格图层(可
- c# – 推荐.NET类用于集合唯一的整数?
- 浅析闪存盘(Flash Drive)内部架构与应用考虑
- ajaxfileupload 隐藏input file组件上传文件的两种实现
- 依赖关系未添加到POM文件 – Android Gradle Maven Publish
- reactjs – 如何在react-redux中的mapDispatchToProps中调度