理解执行计划.ppt

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
理解执行计划

2.理解执行计划 2.理解执行计划 2.理解执行计划 2.理解执行计划 2.理解执行计划 2.理解执行计划 2.理解执行计划 2.理解执行计划 2.理解执行计划 2.理解执行计划 2.理解执行计划 2.理解执行计划 2.理解执行计划 2.理解执行计划 2.理解执行计划 2.理解执行计划 2.理解执行计划 2.理解执行计划 * / 29 概述:上一讲我们得到了执行计划, 这讲的目的就是理解它, 会按分解的方式把执行计划的各个元素进行分解,就是这讲的主题 1. 读取部门名称为‘Administration‘的员工信息. select e.* from employees e, departments d where e.department_id = d.department_id and d.department_name = Administration‘ 涉及两个表, 而每个表又包含不同的索引. 所谓的执行计划就是: 1.Oracle内部采用何种程序来决定执行计划.(Optimizer Mode=all_rows) ? 优化器 2.按何种方式访问数据(Index range scan,table access full.table access by index rowid) ?数据访问方式 3.两个实体之间按何种方式连接(Nested Loops). ?连接方式 4.连接顺序 ( 1,2,3,4 的顺序) ?连接顺序 上面的4个问题也就是我们关注焦点. 1 2 3 4 1.Oracle内部采用何种程序来决定执行计划.(Optimizer Mode=all_rows) 这个问题叫”优化器”的选择, 也就是我们可能经常听说的 RBO(Rule Based Optimization) CBO(Cost Based Optimization) RBO(Optimizer Mode=rule) Oracle 10g已经全面取消对rbo的支持(不再修改bug), 目前我们系统上应用的sql基本不用考虑这种优化器, 作为一种对历史版本的了解, rbo可以简单的理解为oracle把数据访问方式按由小(唯一rowid访问)到大(全表扫描)逻辑进行选择, 由于这种选择方式本身的逻辑缺陷, 导致8i及以前版本的oracle智能化很低, 正式运行的生产系统需要大量的hint固定执行计划才能高效执行. CBO: 基于成本, oracle会根据统计信息来决定数据的访问方式, 10g及后期版本, oracle的cbo优化器有很高的智能,节省了大量的调优工作 2.按何种方式访问数据: 2.1 Full-table scans (table access full) 不少人有个误解, 认为全表扫描是个低效的执行.实际上界定效率高低的方法是判断访问数据块的多少. 一般来说对于b-tree索引, 如果索引条件选择性大于20%, 则应该采用全表扫描.位图索引比例能高一些(索引效率高). full_or_index_analyst.sql 2.2 Index scans 2.3 Row ID scans 2.按何种方式访问数据: 2.2 Index scans ? 2.2.1 Index unique scan select * from customers where cust_id = 49671 ? 2.2.2 Index range scan select * from customers where cust_id between 49671 and 50000 ? 2.2.3 Index skip scan 这种类型针对复合索引, 8i版本是没有这个功能的. 如再customers上的first_name和last_name上建立复合索引. select /*+index(c idx_cust_name)*/ from customers c where cust_last_name = Ruddy‘ SELECT STATEMENT Optimizer Mode=ALL_ROWS TABLE ACCESS BY INDEX ROWID SH.CUSTOMERS INDEX FULL SCAN SH.IDX_CUST_NAME 可以查看这个执行计划, 会发现并没用真正按index skip scan执行, 分析逻辑可得复合索引项至少要3项才可能让cbo采用index skip scan, 2.按何种方式访问数据: 2.2 Index scans ? 2.2.

文档评论(0)

yan698698 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档