ORACLE中的执行计划

ORACLE中的执行计划

ID:47432271

大小:89.00 KB

页数:22页

时间:2020-01-11

ORACLE中的执行计划_第页
预览图正在加载中,预计需要20秒,请耐心等待
资源描述:

《ORACLE中的执行计划》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Oracle执行计划1,什么是执行计划所谓执行计划,顾名思义,就是对一个查询任务,做出一份怎样去完成任务的详细方案。举个生活中的例子,我从珠海要去英国,我可以选择先去香港然后转机,也可以先去北京转机,或者去广州也可以。但是到底怎样去英国划算,也就是我的费用最少,这是一件值得考究的事情。同样对于查询而言,我们提交的SQL仅仅是描述出了我们的目的地是英国,但至于怎么去,通常我们的SQL中是没有给出提示信息的,是由数据库来决定的。  我们先简单的看一个执行计划的对比:  SQL>setautotracetraceonly

2、  执行计划一:  SQL>selectcount(*)fromt;  COUNT(*)  ----------  24815  ExecutionPlan  0   SELECTSTATEMENTOptimizer=CHOOSE  1  0 SORT(AGGREGATE)  2  1  TABLEAccess(FULL)OF'T'  执行计划二:  SQL>selectcount(*)fromt;  COUNT(*)  24815  ExecutionPlan  0   SELECTSTATEMENTOptimi

3、zer=CHOOSE(Cost=26Card=1)  1  0 SORT(AGGREGATE)  2  1  INDEX(FULLSCAN)OF'T_INDEX'(NON-UNIQUE)(Cost=26Card=28180)  这两个执行计划中,第一个表示求和是通过进行全表扫描来做的,把整个表中数据读入内存来逐条累加;第二个表示根据表中索引,把整个索引读进内存来逐条累加,而不用去读表中的数据。但是这两种方式到底哪种快呢?通常来说可能二比一快,但也不是绝对的。这是一个很简单的例子演示执行计划的差异。对于复杂的SQL(

4、表连接、嵌套子查询等),执行计划可能几十种甚至上百种,但是到底那种最好呢?我们事前并不知道,数据库本身也不知道,但是数据库会根据一定的规则或者统计信息(statistics)去选择一个执行计划,通常来说选择的是比较优的,但也有选择失误的时候,这就是这次讨论的价值所在。 Oracle优化器模式  Oracle优化器有两大类,基于规则的和基于代价的,在SQLPLUS中我们可以查看init文件中定义的缺省的优化器模式。  SQL>showparametersoptimizer_mode  NAME            

5、    TYPE  VALUE  optimizer_mode          string CHOOSE  SQL>  这是Oracle8.1.7企业版,我们可以看出,默认安装后数据库优化器模式为CHOOSE,我们还可以设置为RULE、FIRST_ROWS,ALL_ROWS。可以在init文件中对整个instance的所有会话设置,也可以单独对某个会话设置:  SQL>ALTERSESSIONSEToptimizer_mode =RULE;  会话已更改。  SQL> ALTERSESSIONSEToptimi

6、zer_mode =FIRST_ROWS;  会话已更改。  SQL> ALTERSESSIONSEToptimizer_mode =ALL_ROWS;  会话已更改。  基于规则的查询,数据库根据表和索引等定义信息,按照一定的规则来产生执行计划;基于代价的查询,数据库根据搜集的表和索引的数据的统计信息(通过analyze命令或者使用dbms_stats包来搜集)综合来决定选取一个数据库认为最优的执行计划(实际上不一定最优)。RULE是基于规则的,CHOOSE表示如果查询的表存在搜集的统计信息则基于代价来执行(在C

7、HOOSE模式下Oracle采用的是FIRST_ROWS),否则基于规则来执行。在基于代价的两种方式中,FIRST_ROWS指执行计划采用最少资源尽快的返回部分结果给客户端,对于排序分页页显示这种查询尤其适用,ALL_ROWS指以总体消耗资源最少的方式返回结果给客户端。  基于规则的模式下,数据库的执行计划通常比较稳定。但在基于代价的模式下,我们才有更大的机会选择最优的执行计划。也由于Oracle的很多查询方面的特性必须在基于代价的模式下才能体现出来,所以我们通常不选择RULE(并且Oracle宣称从Oracle1

8、0i版本数据库开始将不再支持RULE)。既然是基于代价的模式,也就是说执行计划的选择是根据表、索引等定义和数据的统计信息来决定的,这个统计信息是根据analyze命令或者dbms_stats包来定期搜集的。首先存在着一种可能,就是由于搜集信息是一个很消耗资源和时间的动作,尤其当表数据量很大的时候,因为搜集信息是对整个表数据进行重新的完全统计,所以这是我们必须

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

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

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