Oracle SQL性能优化剖析.ppt

  1. 1、本文档共63页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2003-09 ORACLE SQL 性能优化 31 用索引提高效率 优点: ? 提高效率 ? 主键的唯一性验证 代价: ? 需要空间存储 ? 定期维护 重构索引: ALTER INDEX INDEXNAME REBUILD TABLESPACENAME 2003-09 ORACLE SQL 性能优化 32 索引的操作 Oracle 对索引有两种访问模式: ? 索引唯一扫描 (Index Unique Scan) ? 索引范围扫描 (Index Range Scan) 2003-09 ORACLE SQL 性能优化 33 基础表的选择 ? 基础表 (Driving Table) 是指被最先访问的表 ( 通常 以全表扫描的方式被访问 ). 根据优化器的不同 , SQL 语句中基础表的选择是不一样的 . ? 如果你使用的是 CBO (COST BASED OPTIMIZER), 优化器会检查 SQL 语句中的每个表的 物理大小 , 索引的状态 , 然后选用花费最低的执行路 径 . ? 如果你用 RBO (RULE BASED OPTIMIZER) , 并 且所有的连接条件都有索引对应 , 在这种情况下 , 基 础表就是 FROM 子句中列在最后的那个表 2003-09 ORACLE SQL 性能优化 34 多个平等的索引 ? 当 SQL 语句的执行路径可以使用分布在多个表上的多个索引时, ORACLE 会同时使用多个索引并在运行时对它们的记录进行合 并,检索出仅对全部索引有效的记录。 ? 在 ORACLE 选择执行路径时,唯一性索引的等级高于非唯一性 索引。然而这个规则只有当 WHERE 子句中索引列和常量比较 才有效。如果索引列和其他表的索引类相比较。这种子句在优 化器中的等级是非常低的。 ? 如果不同表中两个相同等级的索引将被引用, FROM 子句中表 的顺序将决定哪个会被率先使用。 FROM 子句中最后的表的 索引将有最高的优先级。 ? 如果相同表中两个相同等级的索引将被引用, WHERE 子句中 最先被引用的索引将有最高的优先级。 2003-09 ORACLE SQL 性能优化 35 等式比较优先于范围比较 DEPTNO 上有一个非唯一性索引, EMP_CAT 也有一个非唯一 性索引。 SELECT ENAME FROM EMP WHERE DEPTNO 20 AND EMP_CAT = ‘A; 这里只有 EMP_CAT 索引被用到 , 然后所有的记录将逐条与 DEPTNO 条件进行比较 . 执行路径如下 : TABLE ACCESS BY ROWID ON EMP INDEX RANGE SCAN ON CAT_IDX 即使是唯一性索引,如果做范围比较,其优先级也低于非唯一 性索引的等式比较。 2003-09 ORACLE SQL 性能优化 36 不明确的索引等级 当 ORACLE 无法判断索引的等级高低差别 , 优化器将 只使用一个索引 , 它就是在 WHERE 子句中被列在最前 面的 . 这里 , ORACLE 只用到了 DEPT_NO 索引 . 执行路径 如下 : TABLE ACCESS BY ROWID ON EMP INDEX RANGE SCAN ON DEPT_IDX DEPTNO 上有一个非唯一性索引 ,EMP_CAT 也有一 个非唯一性索引 . SELECT ENAME FROM EMP WHERE DEPTNO 20 AND EMP_CAT ‘A; 2003-09 ORACLE SQL 性能优化 37 强制索引失效 如果两个或以上索引具有相同的等级 , 你可以强制命令 ORACLE 优化器使用其中的一个 ( 通过它 , 检索出的记录 数量少 ) . SELECT ENAME FROM EMP WHERE EMPNO = 7935 AND DEPTNO + 0 = 10 /*DEPTNO 上的索引将失效 */ AND EMP_TYPE || ‘ = ‘A /*EMP_TYPE 上的索引将失效 */ 2003-09 ORACLE SQL 性能优化 38 避免在索引列上使用计算 WH

文档评论(0)

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

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

1亿VIP精品文档

相关文档