ORACLE基于SQL查询优化培训文档概要.ppt

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

谢 谢 谢 谢 ORACLE基于SQL查询优化培训文档 2013年11月 查询优化基本准则详解 * ORACLE 的解析器按照从右到左的顺序处理 FROM 子句中的表名,因 此 FROM 子句中写在最后的表(基础表 driving table)将被最先处理。在 FROM 子句中包含多个表的情况下,你必须选择记录条数最少的表作为 基础表。 例如: 表 TAB1 16384 条记录 表 TAB2 1 条记录 选择 TAB2作为基础表 (最好的方法) select count(*) from tab1,tab2 执行时间 0.96秒 选择 TAB2作为基础表 (不佳的方法) select count(*) from tab2,tab1 执行时间 26.09秒 查询优化基本准则详解 * ORACLE 采用自下而上的顺序解析 WHERE 子句,根据这个原理, 表之间的连接必须写在其他 WHERE 条件之前, 那些可以过滤掉最大 数量记录的条件必须写在 WHERE 子句的末尾。 例如: (低效,执行时间 156.3秒) SELECT … FROM EMP E WHERE SAL 50000 AND JOB = ‘MANAGER AND 25 (SELECT COUNT(*) FROM EMP WHERE MGR=E.EMPNO); (高效,执行时间 10.6秒) SELECT … FROM EMP E WHERE 25 (SELECT COUNT(*) FROM EMP WHERE MGR=E.EMPNO) AND SAL 50000 AND JOB = ‘MANAGER; 在进行多表关联时,多用 Where 语句把单个表的结果集最小化,多用聚合 函数汇总结果集后再与其它表做关联,以使结果集数据量最小化 查询优化基本准则详解 * 减少对表的查询 在含有子查询的 SQL语句中,要特别注意减少对表的查询 例如: 低效 SELECT TAB_NAME FROM TABLES WHERE TAB_NAME = ( SELECT TAB_NAME FROM TAB_COLUMNS WHERE VERSION = 604) AND DB_VER= ( SELECT DB_VER FROM TAB_COLUMNS WHERE VERSION = 604) 高效 SELECT TAB_NAME FROM TABLES WHERE (TAB_NAME,DB_VER) = ( SELECT TAB_NAME,DB_VER) FROM TAB_COLUMNS WHERE VERSION = 604) 查询优化基本准则详解 * 用EXISTS替代IN 在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表 进行联接。在这 种情况下, 使用 EXISTS(或 NOT EXISTS)通常将提高查询的 效率。使用 exists 而不用 IN 因为 Exists 只检查行的存在,而 in 检查实际值 例如: 低效 SELECT * FROM EMP (基础表) WHERE EMPNO 0 AND DEPTNO IN (SELECT DEPTNO FROM DEPT WHERE LOC = ‘MELB) 高效 SELECT * FROM EMP (基础表) WHERE EMPNO 0 AND EXISTS (SELECT ‘X FROM DEPT WHERE DEPT.DEPTNO = EMP.DEPTNO AND LOC = ‘MELB) 用 IN 的 SQL 性能总是比较低,原因是: 对于用 IN 的 SQL 语句 ORACLE 总是试图将其转换成多个表的连接,如果转换 不成功则先执行 IN里面的子查询,再查询外层的表记录如果转换成功就转换 成多个表的连接。因此 不管理怎么,用 IN 的 SQL 语句总是多了 一个转换的 过程。因此在业务密集的SQL当中尽量不采用IN操作符。 查询优化基本准则详解 * 用NOT EXISTS替代 NOT IN 在子查询中, NOT IN子句将执行一个内部的排序和合并。 无论在哪种情况 下, NOT IN都是最低效的 (因为它对子查询中的表执行了一个全表遍历)。 为了避免使用 NOT IN ,我们可以把它改写成外连接(Outer Joins)或 NOT EXISTS. 例如: SELECT … FROM EMP WHERE DEPT_NO NOT IN (SELECT DEPT_NO FROM DEPT WHERE DEPT_CAT=A); 为了提高效率。改写为: SELECT

文档评论(0)

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

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

1亿VIP精品文档

相关文档