网站大量收购独家精品文档,联系QQ:2885784924

Oracle学习交流_张杰_SQL性能优化总结.ppt

  1. 1、本文档共34页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ORACLE SQL 学习心得;讲解主要内容;数据库和应用系统性能; 随着软件技术的不断发展,系统性能越来越重要. 系统性能主要用系统响应时间和并发性来衡量,下面将主要讲解SQL影响的解 决方案讲解. 造成SQL语句性能不佳大致有两个原因(忽略了机器、数据库和设计的原因): 1):开发人员只关注查询结果的正确性,忽视查询语句的效率。 2):开发人员只关注SQL语句本身的效率,对SQL语句执行原理、影响SQL执行效率的主要因素不清楚。 前者可以通过深入学习SQL语法及各种SQL调优技巧进行解决。SQL调优是一个系统工程,熟悉SQL语法、掌握各种内嵌函数、分析函数的用法只是编写高效SQL的必要条件。后者从分析SQL语句执行原理入手,指出SQL调优应在优化SQL解析和优化CBO(cost-based SQL optimizer基于成本的优化器)上。;SQL*Plus;ORACLE优化器;选择使用优化器简单介绍:;什么是好的SQL语句?;SQL的共???原理;SQL的共享原理;具体SQL性能的优化; 如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其他表所引用的表. 例如: EMP表描述了LOCATION表和CATEGORY表的交集.   SELECT * FROM LOCATION L , CATEGORY C, EMP E   WHERE E.EMP_NO BETWEEN 1000 AND 2000   AND E.CAT_NO = C.CAT_NO AND E.LOCN = L.LOCN  ?将比下列SQL更有效率   SELECT * FROM EMP E , LOCATION L , CATEGORY C   WHERE E.CAT_NO = C.CAT_NO AND E.LOCN = L.LOCN   AND E.EMP_NO BETWEEN 1000 AND 2000 ; 2、 ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾. 例如: SELECT … FROM EMP E WHERE SAL 50000 AND JOB = ‘MANAGER’ AND 25 (SELECT COUNT(*) FROM EMP WHERE MGR=E.EMPNO); (低效) SELECT … FROM EMP E WHERE 25 (SELECT COUNT(*) FROM EMP WHERE MGR=E.EMPNO) AND SAL 50000 AND JOB = ‘MANAGER’;(高效);3、SELECT子句中避免使用 ‘ * ‘ 当你想在SELECT子句中列出所有的COLUMN时,使用动态SQL列引用 ‘*’ 是一个方便的方法.不幸的是,这是一个非常低效的方法. 实际上,ORACLE在解析的过程中, 会将’*’ 依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 这意味着将耗费更多的时间. 4、 减少访问数据库的次数   当执行每条SQL语句时, ORACLE在内部执行了许多工作: 解析SQL语句, 估算索引的利用率, 绑定变量 , 读数据块等等. 由此可见, 减少访问数据库的次数 , 就能实际上减少ORACLE的工作量. ; 5、整合简单,无关联的数据库访问 如果你有几个简单的数据库查询语句,你可以把它们整合到一个查询中(即使它们之间没有关系,虽然采取这种方法,效率得到提高,但是程序的可读性大大降低,所以读者 还是要权衡之间的利弊) 例如: SELECT NAME FROM EMP WHERE EMP_NO = 1234; ?SELECT NAME FROM DPT WHERE DPT_NO = 10 ; SELECT NAME FROM CAT WHERE CAT_TYPE = ‘RD’; 上面的3个查询可以被合并成一个:?;?SELECT E.NAME , D.NAME , C.NAME FROM CAT C , DPT D , EMP E,DUAL X WHERE NVL(‘X’,X.DUMMY) = NVL(‘X’,E.ROWID(+)) AND NVL(‘X’,X.DUMMY) = NVL(‘X’,D.ROWID(+)) AND NVL(‘X’,X.DUMMY) = NVL(‘X’,C.ROWID(+)) AND E.EM

文档评论(0)

好文精选 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档