最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

关于Oracle中执行计划稳定性深入研究

来源:懂视网 责编:小采 时间:2020-11-09 08:30:21
文档

关于Oracle中执行计划稳定性深入研究

关于Oracle中执行计划稳定性深入研究:欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入 什么是执行计划 所谓执行计划,顾名思义,就是对一个查询任务,做出一份怎样去完成任务的详细方案。举个生活中的例子,我从珠海要去英国,我可以选择先去香港然后转机,也可以先去北京转机,或者去
推荐度:
导读关于Oracle中执行计划稳定性深入研究:欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入 什么是执行计划 所谓执行计划,顾名思义,就是对一个查询任务,做出一份怎样去完成任务的详细方案。举个生活中的例子,我从珠海要去英国,我可以选择先去香港然后转机,也可以先去北京转机,或者去

欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入 什么是执行计划 所谓执行计划,顾名思义,就是对一个查询任务,做出一份怎样去完成任务的详细方案。举个生活中的例子,我从珠海要去英国,我可以选择先去香港然后转机,也可以先去北京转机,或者去

欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入

什么是执行计划

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

我们先简单的看一个执行计划的对比:


SQL> set autotrace traceonly
  
  执行计划一:
  
  SQL> select count(*) from t;
  
  COUNT(*)
  ----------
  24815
  
  Execution Plan
  
0   SELECT STATEMENT Optimizer=CHOOSE
  
  1  0  SORT (AGGREGATE)
  
  2  1   TABLE ACCESS (FULL) OF 'T'
  
  执行计划二:
  
  SQL> select count(*) from t;
  
  COUNT(*)
  
  24815
  
  Execution Plan
  
  0   SELECT STATEMENT Optimizer=CHOOSE (Cost=26 Card=1)
  
  1  0  SORT (AGGREGATE)
  
  2  1   INDEX (FULL SCAN) OF 'T_INDEX' (NON-UNIQUE) (Cost=26 Card=28180)

  
这两个执行计划中,第一个表示求和是通过进行全表扫描来做的,把整个表中数据读入内存来逐条累加;第二个表示根据表中索引,把整个索引读进内存来逐条累加,而不用去读表中的数据。但是这两种方式到底哪种快呢?通常来说可能二比一快,但也不是绝对的。这是一个很简单的例子演示执行计划的差异。对于复杂的SQL(表连接、嵌套子查询等),执行计划可能几十种甚至上百种,但是到底那种最好呢?我们事前并不知道,数据库本身也不知道,但是数据库会根据一定的规则或者统计信息(statistics)去选择一个执行计划,通常来说选择的是比较优的,但也有选择失误的时候,这就是这次讨论的价值所在。

Oracle优化器模式

Oracle优化器有两大类,基于规则的和基于代价的,在SQLPLUS中我们可以查看init文件中定义的缺省的优化器模式。


  
  SQL> show parameters optimizer_mode
  
  NAME                 TYPE  VALUE
  
    
  optimizer_mode           string  CHOOSE
  
  SQL>

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


  
  SQL> ALTER SESSION SET optimizer_mode = RULE;
  
  会话已更改。
  
  SQL> ALTER SESSION SET optimizer_mode = FIRST_ROWS;
  
  会话已更改。
  
  SQL> ALTER SESSION SET optimizer_mode = ALL_ROWS;
  
  会话已更改。

[1] [2]

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

关于Oracle中执行计划稳定性深入研究

关于Oracle中执行计划稳定性深入研究:欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入 什么是执行计划 所谓执行计划,顾名思义,就是对一个查询任务,做出一份怎样去完成任务的详细方案。举个生活中的例子,我从珠海要去英国,我可以选择先去香港然后转机,也可以先去北京转机,或者去
推荐度:
标签: 进入 计划 稳定
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top