文档详情

一条SQL语句的优化过程.doc

发布:2015-09-23约4.37千字共5页下载文档
文本预览下载声明
一条SQL语句的优化过程   很简单的一次调整,语句加了适当的索引后性能就有大幅的提升。当时看到这条语句的时候,第一感觉就是执行效率肯定低下。语句的功能是求某一客户当天产品的总销量。            原来的语句是这样的:         select sum(sl0000) from xstfXPs2 where   dhao00 in (   select dhao00 from xstfxps1 where trunc(ywrq00)=trunc(sysdate)   and khdm00=500000003913);   已用时间: 00: 02: 49.04      Execution Plan   ----------------------------------------------------------   0 SELECT STATEMENT Optimizer=CHOOSE   1 0 SORT (AGGREGATE)   2 1 NESTED LOOPS   3 2 TABLE access (FULL) OF XSTFXPS2   4 2 TABLE ACCESS (BY INDEX ROWID) OF XSTFXPS1   5 4 INDEX (UNIQUE SCAN) OF XSTFXPS1_PK (UNIQUE)      Statistics   ----------------------------------------------------------   0 recursive calls   0 db block gets  consistent gets   34141 physical reads   2912 redo size   198 bytes sent via SQL*Net to client   275 bytes received via SQL*Net from client   2 SQL*Net roundtrips to/from client   0 sorts (memory)   0 sorts (disk)   1 rows PRocessed   我们看到统计信息里面进行逻辑读,34141次物理IO,这是相当吓人的数字。在执行计划里面我们看到表XSTFXPS2来了一次全表扫描。   我们首先看一下这两张表总的数据量:   SQL select count(*) from xstfxps2;      COUNT(*)   ----------   5585018   我们这里看到XSTFXPS2这张表有5585018条记录。   SQL select count(*) from xstfxps1;      COUNT(*)   ----------   702121   两张表的表结构如下所示:   SQL desc xstfxps1   Name Type Nullable Default Comments   ------ ------------ -------- ------- --------   DHAO00 NUMBER(8)   LHDH00 NUMBER(8) Y   FLDH00 NUMBER(8) Y   FPLB00 VARCHAR2(2) Y   YWRQ00 DATE Y   YWRY00 VARCHAR2(8) Y   SHRQ00 DATE Y   XSQRRQ DATE Y   XSQRRY VARCHAR2(8) Y   KHDM00 VARCHAR2(12)   XKZH00 VARCHAR2(12)   CKDM00 VARCHAR2(2) Y   THCKDM VARCHAR2(2) Y   XSFSDM VARCHAR2(2) Y   FXRYDM VARCHAR2(4) Y   SHRYDM VARCHAR2(4) Y   SHBJ00 VARCHAR2(1) N   FXBJ00 VARCHAR2(1) N   SKBJ00 VARCHAR2(2) Y   FKDM00 VARCHAR2(2) Y      SQL desc xstfxps2   Name Type Nullable Default Comments   ------ ------------ -------- ------- --------   DHAO00 NUMBER(8)   SPDM00 VARCHAR2(8)   DJIA00 NUMBER(7,2) 0   FXSL00 NUMBER Y 0   SL00
显示全部
相似文档