案例1ORACLEANALYZE命令的使用

上传人:cl****1 文档编号:489185162 上传时间:2023-05-12 格式:DOC 页数:2 大小:15KB
返回 下载 相关 举报
案例1ORACLEANALYZE命令的使用_第1页
第1页 / 共2页
案例1ORACLEANALYZE命令的使用_第2页
第2页 / 共2页
亲,该文档总共2页,全部预览完了,如果喜欢就下载吧!
资源描述

《案例1ORACLEANALYZE命令的使用》由会员分享,可在线阅读,更多相关《案例1ORACLEANALYZE命令的使用(2页珍藏版)》请在金锄头文库上搜索。

1、 oracle 中ANALYZE的使用 知识背景: 1、优化器的优化方式oracle的优化器共有两种的优化方式,即基于规则的优化方式(Rule-Based Optimization,简称为RBO)和基于代价的优化方式(Cost-Based Optimization,简称为CBO)。A、RBO方式:优化器在分析SQL语句时,所遵循的是Oracle内部预定的一些规则。比如我们常见的,当一个where子句中的一列有索引时去走索引。B、CBO方式:依词义可知,它是看语句的代价(Cost)了,这里的代价主要指Cpu和内存。优化器在判断是否用这种方式时,主要参照的是表及索引的统计信息。统计信息给出表的大小

2、 、有少行、每行的长度等信息。这些统计信息起初在库内是没有的,是你在做analyze后才出现的,很多的时侯过期统计信息会令优化器做出一个错误的执行计划,因些我们应及时更新这些信息。在Oracle8及以后的版本,Oracle列推荐用CBO的方式。我们要明了,不一定走索引就是优的 ,比如一个表只有两行数据,一次IO就可以完成全表的检索,而此时走索引时则需要两次IO,这时对这个表做全表扫描(full table scan)是最好的。2、优化器的优化模式(Optermizer Mode)优化模式包括Rule,Choose,First rows,All rows这四种方式,也就是我们以上所提及的。如下我

3、解释一下:Rule:不用多说,即走基于规则的方式。Choolse:这是我们应观注的,默认的情况下Oracle用的便是这种方式。指的是当一个表或或索引有统计信息,则走CBO的方式,如果表或索引没统计信息,表又不是特别的小,而且相应的列有索引时,那么就走索引,走RBO的方式。First Rows:它与Choose方式是类似的,所不同的是当一个表有统计信息时,它将是以最快的方式返回查询的最先的几行,从总体上减少了响应时间。All Rows:也就是我们所说的Cost的方式,当一个表有统计信息时,它将以最快的方式返回表的所有的行,从总体上提高查询的吞吐量。没有统计信息则走基于规则的方式。3、为什么有时一

4、个表的某个字段明明有索引,当观察一些语的执行计划确不走索引呢?如何解决呢 ?A、不走索引大体有以下几个原因你在Instance级别所用的是all_rows的方式你的表的统计信息(最可能的原因)你的表很小,上文提到过的,Oracle的优化器认为不值得走索引。B、解决方法可以修改init.ora中的OPTIMIZER_MODE这个参数,把它改为Rule或Choose,重起数据库。也可以使用4中所提的Hint.删除统计信息,重新分析。SQLanalyze table table_name delete statistics;表小不走索引是对的,不用调的。4、其它相关A、如何看一个表或索引是否是统计信

5、息SQLSELECT * FROM user_tables2 WHERE table_name=3 AND num_rows is not null;SQLSELECT * FROM user_indexes2 WHERE table_name=3 AND num_rows is not null;b、如果我们先用CBO的方式,我们应及时去更新表和索引的统计信息,以免生形不切合实的执行计划。SQL ANALYZE TABLE table_name COMPUTE STATISTICS;SQL ANALYZE INDEX index_name ESTIMATE STATISTICS;上述问题的查询语句之所以不走索引就是因为分析表改变了执行计划而引起的。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 机械/制造/汽车 > 汽车技术

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号