SQL优化交流_091222.ppt

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

十. 优化模型探讨 (分享个人经验总结) 响应时间树总体概要模型 客户端及网络层响应时间树分支模型 数据库服务器响应时间分支模型 数据库响应时间树总体详细模型全貌 (结论版) 1、优化目标明确,即如何减少T值(详细方法见下文的优化实施树) T=Tc+Tn+P+R+(N*B)/V +W 减少T值即减少Tc,Tn,P,R,N,B,W (本质为减少访问量) 提高V(本质为提高吞吐量,如提升硬件,增加CPU内存,增大并行等) 2、解决问题要抓住事物主要矛盾 T=Tc+Tn+P+R+(N*B)/V +W,我们可从STATSPACK报告和动态性能视图两方面着手分析,找出消耗最大的部分优先解决,如W消耗很小,等待事件就不是我们关注的重心。P很大,说明CPU解析过度,代码是否共享不足就是我们关注的要点! 3、找出问题后要考虑最简单、快捷方法解决(下文优化实施树有体现!) 还是从公式中出发,尽可能减少T值的目标当然需要越快实现越好,这需要我们力求寻找到最快捷的实现方式。因此找到问题SQL后,我们首先要想到的是采用不改SQL方式解决问题(如分析表、增加索引、CAHCHE内存、改变参数等),不能彻底解决问题,才考虑修改代码(因为修改代码有风险,需经历开发、测试、上线、跟踪等步骤)。 数据库优化实施树总体概要模型 整体优化分支模型 局部优化中的“不改写SQL方法”分支模型 局部优化中的“改写SQL方法”分支模型 优化实施树总体详细模型全貌(结论版) 八. 高效SQL介绍 以实验方式说明以下6点 1.分析函数 基本功能为: 找出t表中每个雇员owner的最新记录,就是每个owner分组中取出日期最新的记录。 普通脚本用字连接,代码如下: Select * FROM t t1, (select owner,max(last_ddl_time) max_time from t group by owner) t2 where t1.owner=t2.owner and t1.last_ddl_time=t2.max_time; 分析函数写法代码如下: SELECT * FROM (SELECT T.*, MAX(LAST_DDL_TIME) OVER(PARTITION BY OWNER) AS MAX_TIME FROM T) WHERE LAST_DDL_TIME = MAX_TIME; 2.WITH子句 分别用前面学习的观察执行计划的方法来观察这两个等价语句 drop table t_with; CREATE TABLE T_WITH AS SELECT ROWNUM ID, A.* FROM DBA_SOURCE A WHERE ROWNUM 100001; SET autotrace traceonly Set linesize 1000 SELECT ID, NAME FROM T_WITH WHERE ID IN (SELECT MAX(ID) FROM T_WITH UNION ALL SELECT MIN(ID) FROM T_WITH UNION ALL SELECT TRUNC(AVG(ID)) FROM T_WITH ); WITH AGG AS (SELECT MAX(ID) MAX, MIN(ID) MIN, TRUNC(AVG(ID)) AVG FROM T_WITH) SELECT ID, NAME FROM T_WITH WHERE ID IN ( SELECT MAX FROM AGG UNION ALL SELECT MIN FROM AGG UNION ALL SELECT AVG FROM AGG ); Set autotrace off 3.INSERT ALL 举例: 构造环境 create table z_test(id int,name varchar2(10)); create table z_test1(id int ,name varchar2(10)); create table z_test2(id int); create table z_test3(name varchar2(10)); insert into z_test (id ,name ) values (10,133);

文档评论(0)

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

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档