oracle优化器(optimizer)

oracle优化器(optimizer)

ID:8970903

大小:20.34 KB

页数:4页

时间:2018-04-13

oracle优化器(optimizer)_第1页
oracle优化器(optimizer)_第2页
oracle优化器(optimizer)_第3页
oracle优化器(optimizer)_第4页
资源描述:

《oracle优化器(optimizer)》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、Oracle优化器(Optimizer)是Oracle在执行SQL之前分析语句的工具。Oracle的优化器有两种优化方式:基于规则的优化方式:Rule-BasedOptimization(RBO)优化器在分析SQL语句时,所遵循的是Oracle内部预定的一些规则。比如我们常见的,当一个where子句中的一列有索引时去走索引。基于成本或者统计信息的优化方式(Cost-BasedOptimization:CBO)CBO是在ORACLE7引入,但到ORACLE8i中才成熟。ORACLE已经声明在ORACLE9i之后的版本中,RBO将不再支持。它是看语句

2、的代价(Cost),这里的代价主要指Cpu和内存。CPUCosting的计算方式现在默认为CPU+I/O两者之和.可通过DBMS_XPLAN.DISPLAY_CURSOR观察更为详细的执行计划。优化器在判断是否用这种方式时,主要参照的是表及索引的统计信息。统计信息给出表的大小、有少行、每行的长度等信息。这些统计信息起初在库内是没有的,是做analyze后才出现的,很多的时侯过期统计信息会令优化器做出一个错误的执行计划,因些应及时更新这些信息。按理,CBO应该自动收集,实际却不然,有时候在CBO情况下,还必须定期对大表进行分析。Oracle优化器的

3、优化模式:1)      CHOOSE仅在9i及之前版本中被支持,10g已经废除。8i及9i中为默认值。这个值表示SQL语句既可以使用RBO优化器也可以使用CBO优化器,而决定该SQL到底使用哪个优化器的唯一因素是,所访问的对象是否存在统计信息。如果所访问的全部对象都存在统计信息,则使用CBO优化器优化SQL;如果只有部分对象存在统计信息,也仍然使用CBO优化器优化SQL,优化器会为不存在统计信息对象依据一些内在信息(如分配给该对象的数据块)来生成统计信息,只是这样生成的统计信息可能不准确,而导致产生不理想的执行计划;如果全部对象都无统计信息,则

4、使用RBO来优化该SQL语句。2)      RULE仅在9i及之前版本中被支持,10g已经废除。不论是否存在统计信息,都将使用RBO优化器来优化SQL。3)      ALL_ROWS在10g中为默认值。不论是否存在统计信息,都使用CBO优化器,且把CBO的优化目标设定为“最小的成本”。4)      FIRST_ROWSCBO尽可能快速的返回结果集的前面少数行记录。不论是否存在统计信息,都使用CBO优化器,FIRST_ROWS导致CBO使用“试探法”来产生执行计划,这种方式其成本可能会稍大一些。5)      FIRST_ROWS_n不论是否

5、存在统计信息,都使用CBO优化器,并以最快的速度返回前n行记录,n可以是1,10,100,1000。优化器只有2种,使用不同的优化模式可以指定优化器。首先,默认的优化模式是Choose,文章建议我们避免使用Choose模式。然后,Oracle对RBO优化器的支持只到9IR2,也就是说从Oracle10开始,RBO就不存在了,但是仍然可以用HINTS来使用RBO模式。如何查看正在使用的模式:showparameteroptimizer_mode修改使用的优化模式的方法:1)      Instance级别:在init.ora文件中设定OP

6、TIMIZER_MODE;2)      Session级别:通过SQL>ALTERSESSIONSETOPTIMIZER_MODE=;来设定。3)      语句级别:通过SQL>SELECT/*+ALL+_ROWS*/……;来设定。可用的HINT包括/*+ALL_ROWS*/、/*+FIRST_ROWS*/、/*+CHOOSE*/、/*+RULE*/等。要注意的是,如果表有统计信息,则可能造成语句不走索引的结果。可以用SQL>ANALYZETABLEtable_nameDELETESTATISTICS;删除统计信息。对列和索引更新统计信息的S

7、QL:SQL>ANALYZETABLEtable_nameCOMPUTESTATISTICS;SQL>ANALYZEINDEXindex_nameESTIMATESTATISTICS;FIRST_ROWS(n)模式说明当CBO的优化模式设置为FIRST_ROWS(n)时,Oracle在执行SQL时,优先考虑将结果集中的前n条记录以最快的速度反馈回来,而其他的结果并不需要同时返回。这种需求在一些网站或者BBS的分页上经常看到,比如每次只显示查询信息的前20条或者BBS上的前20个帖子,这时候设置FIRST_ROWS(20)就非常合适,优化器并不需要

8、同事将所有符合条件的结果返回,用户也不需要。这时,CBO将考虑用一种最快的返回前20条记录的执行计划,这种执行计划对于SQL的整体执行时

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。