网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.优化Oracle数据 获取角斗士般的性.
.教你清除Oracle中无用的索引改善.
.Oracle 8i数据库体系结构.
.Oracle 中的in-line view.
.如何快速启动oracle8iSQL-Plus?.
.上传文件至Oracle数据库.
.10gR2使用RMAN恢复临时表空间的增.
.Linux下如何优化Oracle.
.Oracle 10G 最佳20位新特性:闪回.
.ORACLE 服务器的配置及优化.
.ORACLE在HP-UX下的系列问题处理(.
.快速解决Oracle监听器服务不能启.
.Oracle XML学习笔记-存储XML数据.
.Oracle:10.0.1.2.0的bug!.
.如何在你的Linux机器上安装运行O.
.[Tip]你的Oracle是32位的还是64位.
.Oracle SQL性能优化系列介绍(上.
.分析数据库性能的SQL.
.从纵横五个方面精细优化你的Orac.
.Oracle 8i release 3(version 8..

一次分析的全过程

发表日期:2008-2-9



  我们的程序员抱怨一段执行很慢的程序,我把代码执行分析执行计划,
  后果如下:
  
  这是最初的执行效果及执行计划
  
  SQL> SELECT "SP_TRANS"."TRANS_NO",
  2 "SP_TRANS_SUB"."ITEM_CODE",
  3 "SP_ITEM"."ITEM_NAME",
  4 "SP_ITEM"."CHART_ID",
  5 "SP_ITEM"."SPECIFICATION",
  6 "SP_TRANS_SUB"."COUNTRY",
  7 "SP_TRANS_SUB"."QTY",
  8 "SP_TRANS_SUB"."PRICE",
  9 "SP_TRANS"."VENDOR_CODE",
  10 "SP_TRANS"."PAY_MODE",
  11 NVL("SP_TRANS_SUB"."PAY_QTY",0),
  12 0 as PAY_THIS
  13 FROM "SP_ITEM",
  14 "SP_TRANS_SUB",
  15 "SP_TRANS"
  16 WHERE ( "SP_TRANS_SUB"."TRANS_NO" = "SP_TRANS"."TRANS_NO" ) and
  17 ( "SP_ITEM"."ITEM_CODE" = "SP_TRANS_SUB"."ITEM_CODE" ) and
  18 ( ( "SP_TRANS"."VENDOR_CODE" = '20011021023') )
  19 /
  
  8 rows selected.
  
  Elapsed: 00: 00: 00.51
  
  Execution Plan
  ----------------------------------------------------------
  0 SELECT STATEMENT Optimizer=CHOOSE
  1 0 NESTED LOOPS
  2 1 NESTED LOOPS
  3 2 TABLE Access (FULL) OF 'SP_TRANS'
  4 2 TABLE ACCESS (BY INDEX ROWID) OF 'SP_TRANS_SUB'
  5 4 INDEX (RANGE SCAN) OF 'PK_SP_TRANS_SUB' (UNIQUE)
  6 1 TABLE ACCESS (BY INDEX ROWID) OF 'SP_ITEM'
  7 6 INDEX (UNIQUE SCAN) OF 'PK_SP_ITEM' (UNIQUE)
  
  Statistics
  ----------------------------------------------------------
  0 recursive calls
  4 db block gets
  323 consistent gets
  0 physical reads
  0 redo size
  1809 bytes sent via SQL*Net to client
  425 bytes received via SQL*Net from client
  2 SQL*Net roundtrips to/from client
  0 sorts (memory)
  0 sorts (disk)
  8 rows processed
  此前这几个表都没有分析过。
  
  然后我analyze相关表
  SQL> analyze table sp_trans_sub compute statistics;
  
  Table analyzed.
  
  Elapsed: 00: 00: 30.64
  SQL> SELECT "SP_TRANS"."TRANS_NO",
  2 "SP_TRANS_SUB"."ITEM_CODE",
  3 "SP_ITEM"."ITEM_NAME",
  4 "SP_ITEM"."CHART_ID",
  5 "SP_ITEM"."SPECIFICATION",
  6 "SP_TRANS_SUB"."COUNTRY",
  7 "SP_TRANS_SUB"."QTY",
  8 "SP_TRANS_SUB"."PRICE",
  9 "SP_TRANS"."VENDOR_CODE",
  10 "SP_TRANS"."PAY_MODE",
  11 NVL("SP_TRANS_SUB"."PAY_QTY",0),
  12 0 as PAY_THIS
  13 FROM "SP_ITEM",
  14 "SP_TRANS_SUB",
  15 "SP_TRANS"
  16 WHERE ( "SP_TRANS_SUB"."TRANS_NO" = "SP_TRANS"."TRANS_NO" ) and
  17 ( "SP_ITEM"."ITEM_CODE" = "SP_TRANS_SUB"."ITEM_CODE" ) and
  18 ( ( "SP_TRANS"."VENDOR_CODE" = '20011021023') )
  19 /
  
  8 rows selected.
  
  Elapsed: 00: 00: 06.49
  
  Execution Plan
  ----------------------------------------------------------
  0 SELECT STATEMENT Optimizer=CHOOSE (Cost=18577 Card=126726520
  Bytes=30034185240)
  
  1 0 MERGE JOIN (Cost=18577 Card=126726520 Bytes=30034185240)
  2 1 SORT (JOIN) (Cost=14722 Card=310300 Bytes=20790100)
  3 2 HASH JOIN (Cost=358 Card=310300 Bytes=20790100)
  4 3 TABLE ACCESS (FULL) OF 'SP_TRANS' (Cost=43 Card=229
  Bytes=8473)
  
  5 3 TABLE ACCESS (FULL) OF 'SP_TRANS_SUB' (Cost=158 Card
  =135502 Bytes=4065060)
  
  6 1 SORT (JOIN) (Cost=3855 Card=40840 Bytes=6942800)
  7 6 TABLE ACCESS (FULL) OF 'SP_ITEM' (Cost=77 Card=40840 B
  ytes=6942800)
  
  Statistics
  ----------------------------------------------------------
  150 recursive calls
  89 db block gets
  1837 consistent gets
  755 physical reads
  60 redo size
  1732 bytes sent via SQL*Net to client
  425 bytes received via SQL*Net from client
  2 SQL*Net roundtrips to/from client
  4 sorts (memory)
  1 sorts (disk)
  8 rows processed
  
  SQL>
  
  SQL> analyze table sp_trans compute statistics;

  
  Table analyzed.
  
  Elapsed: 00: 00: 13.00
  SQL>
  SQL> SELECT "SP_TRANS"."TRANS_NO",
  2 "SP_TRANS_SUB"."ITEM_CODE",
  3 "SP_ITEM"."ITEM_NAME",
  4 "SP_ITEM"."CHART_ID",
  5 "SP_ITEM"."SPECIFICATION",
  6 "SP_TRANS_SUB"."COUNTRY",
  7 "SP_TRANS_SUB"."QTY",
  8 "SP_TRANS_SUB"."PRICE",
  9 "SP_TRANS"."VENDOR_CODE",
  10 "SP_TRANS"."PAY_MODE",
  11 NVL("SP_TRANS_SUB"."PAY_QTY",0),
  12 0 as PAY_THIS
  13 FROM "SP_ITEM",
  14 "SP_TRANS_SUB",
  15 "SP_TRANS"
  16 WHERE ( "SP_TRANS_SUB"."TRANS_NO" = "SP_TRANS"."TRANS_NO" ) and
  17 ( "SP_ITEM"."ITEM_CODE" = "SP_TRANS_SUB"."ITEM_CODE" ) and
  18 ( ( "SP_TRANS"."VENDOR_CODE" = '20011021023') )
  19 /
  
  8 rows selected.
  
  Elapsed: 00: 00: 01.62
  
  Execution Plan
  ----------------------------------------------------------
  0 SELECT STATEMENT Optimizer=CHOOSE (Cost=1453 Card=447198 Byt
  es=101066748)
  
  1 0 NESTED LOOPS (Cost=1453 Card=447198 Bytes=101066748)
  2 1 HASH JOIN (Cost=358 Card=1095 Bytes=61320)
  3 2 TABLE ACCESS (FULL) OF 'SP_TRANS' (Cost=43 Card=273 By
  tes=7098)
  
  4 2 TABLE ACCESS (FULL) OF 'SP_TRANS_SUB' (Cost=158 Card=1
  35502 Bytes=4065060)
  
  5 1 TABLE ACCESS (BY INDEX ROWID) OF 'SP_ITEM' (Cost=1 Card=
  40840 Bytes=6942800)
  
  6 5 INDEX (UNIQUE SCAN) OF 'PK_SP_ITEM' (UNIQUE)
  
  Statistics
  ----------------------------------------------------------
  0 recursive calls
  8 db block gets
  1344 consistent gets
  0 physical reads
  0 redo size
  1824 bytes sent via SQL*Net to client
  425 bytes received via SQL*Net from client
  2 SQL*Net roundtrips to/from client
  3 sorts (memory)
  0 sorts (disk)
  8 rows processed
  
  SQL>
  SQL> analyze table sp_item compute statistics
  2 /
  
  Table analyzed.
  
  Elapsed: 00: 00: 11.67
  SQL> SELECT "SP_TRANS"."TRANS_NO",
  2 "SP_TRANS_SUB"."ITEM_CODE",
  3 "SP_ITEM"."ITEM_NAME",
  4 "SP_ITEM"."CHART_ID",
  5 "SP_ITEM"."SPECIFICATION",
  6 "SP_TRANS_SUB"."COUNTRY",
  7 "SP_TRANS_SUB"."QTY",
  8 "SP_TRANS_SUB"."PRICE",
  9 "SP_TRANS"."VENDOR_CODE",
  10 "SP_TRANS"."PAY_MODE",
  11 NVL("SP_TRANS_SUB"."PAY_QTY",0),
  12 0 as PAY_THIS
  13 FROM "SP_ITEM",
  14 "SP_TRANS_SUB",
  15 "SP_TRANS"
  16 WHERE ( "SP_TRANS_SUB"."TRANS_NO" = "SP_TRANS"."TRANS_NO" ) and
  17 ( "SP_ITEM"."ITEM_CODE" = "SP_TRANS_SUB"."ITEM_CODE" ) and
  18 ( ( "SP_TRANS"."VENDOR_CODE" = '20011021023') )
  19 /
  
  8 rows selected.
  
  Elapsed: 00: 00: 01.43
  
  Execution Plan
  ----------------------------------------------------------
  0 SELECT STATEMENT Optimizer=CHOOSE (Cost=687 Card=1362 Bytes=
  128028)
  
  1 0 HASH JOIN (Cost=687 Card=1362 Bytes=128028)
  2 1 HASH JOIN (Cost=358 Card=1362 Bytes=76272)
  3 2 TABLE ACCESS (FULL) OF 'SP_TRANS' (Cost=43 Card=273 By
  tes=7098)
  
  4 2 TABLE ACCESS (FULL) OF 'SP_TRANS_SUB' (Cost=158 Card=1
  35502 Bytes=4065060)
  
  5 1 TABLE ACCESS (FULL) OF 'SP_ITEM' (Cost=77 Card=29547 Byt
  es=1122786)
  
  Statistics
  ----------------------------------------------------------
  0 recursive calls
  12 db block gets
  1820 consistent gets
  0 physical reads
  0 redo size
  1732 bytes sent via SQL*Net to client
  425 bytes received via SQL*Net from client
  2 SQL*Net roundtrips to/from client
  3 sorts (memory) right">(出处:清风软件下载学院)
上一篇:在unix下定时执行oracle的sql方法 人气:626
下一篇:配置透明网关的步骤 人气:1022
浏览全部Oracle教程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐