网上做调查赚钱的网站有哪些,工程建设标准化期刊,腾讯云国外服务器,wordpress id重置oracle下一条SQL语句的优化过程(比较详细)更新时间#xff1a;2010年04月14日 23:56:49 作者#xff1a;很简单的一次调整#xff0c;语句加了适当的索引后性能就有大幅的提升。当时看到这条语句的时候#xff0c;第一感觉就是执行效率肯定低下。语句的功能是求某一客户当…oracle下一条SQL语句的优化过程(比较详细)更新时间2010年04月14日 23:56:49 作者很简单的一次调整语句加了适当的索引后性能就有大幅的提升。当时看到这条语句的时候第一感觉就是执行效率肯定低下。语句的功能是求某一客户当天产品的总销量。原来的语句是这样的select sum(sl0000) from xstfxps2 wheredhao00 in (select dhao00 from xstfxps1 where trunc(ywrq00)trunc(sysdate)and khdm00500000003913);已用时间: 00: 02: 49.04Execution Plan----------------------------------------------------------0 SELECT STATEMENT OptimizerCHOOSE1 0 SORT (AGGREGATE)2 1 NESTED LOOPS3 2 TABLE ACCESS (FULL) OF XSTFXPS24 2 TABLE ACCESS (BY INDEX ROWID) OF XSTFXPS15 4 INDEX (UNIQUE SCAN) OF XSTFXPS1_PK (UNIQUE)Statistics----------------------------------------------------------0 recursive calls0 db block gets17355138 consistent gets34141 physical reads2912 redo size198 bytes sent via SQL*Net to client275 bytes received via SQL*Net from client2 SQL*Net roundtrips to/from client0 sorts (memory)0 sorts (disk)1 rows processed我们看到统计信息里面进行了17355138次逻辑读34141次物理IO这是相当吓人的数字。在执行计划里面我们看到表XSTFXPS2来了一次全表扫描。我们首先看一下这两张表总的数据量SQL select count(*) from xstfxps2;COUNT(*)----------5585018我们这里看到XSTFXPS2这张表有5585018条记录。SQL select count(*) from xstfxps1;COUNT(*)----------702121两张表的表结构如下所示SQL desc xstfxps1Name Type Nullable Default Comments------ ------------ -------- ------- --------DHAO00 NUMBER(8)LHDH00 NUMBER(8) YFLDH00 NUMBER(8) YFPLB00 VARCHAR2(2) YYWRQ00 DATE YYWRY00 VARCHAR2(8) YSHRQ00 DATE YXSQRRQ DATE YXSQRRY VARCHAR2(8) YKHDM00 VARCHAR2(12)XKZH00 VARCHAR2(12)CKDM00 VARCHAR2(2) YTHCKDM VARCHAR2(2) YXSFSDM VARCHAR2(2) YFXRYDM VARCHAR2(4) YSHRYDM VARCHAR2(4) YSHBJ00 VARCHAR2(1) NFXBJ00 VARCHAR2(1) NSKBJ00 VARCHAR2(2) YFKDM00 VARCHAR2(2) YSQL desc xstfxps2Name Type Nullable Default Comments------ ------------ -------- ------- --------DHAO00 NUMBER(8)SPDM00 VARCHAR2(8)DJIA00 NUMBER(7,2) 0FXSL00 NUMBER Y 0SL0000 NUMBER Y 0THSL00 NUMBER Y 0JE0000 NUMBER Y 0SE0000 NUMBER YFPBBH0 VARCHAR2(11) YFPHAO0 VARCHAR2(10) YRBDH00 NUMBER(8) Y其中XSTFXPS1的客户订单的表头保存订单的客户信息、订货日期等信息。XSTFXPS2是订单的表体详细记录了客户订单的商品、价格、数量等信息。调整的第一步是把子查询提取出来再看语句的执行计划。通常来说如果语句能够避免子查询的使用就尽量不用子查询。因为子查询的开销是相当昂贵的。改写后的语句如下select sum(sl0000)from xstfxps2 a,(select dhao00 from xstfxps1 where trunc(ywrq00)trunc(sysdate)and khdm00500000003913) bwhere a.dhao00b.dhao00;已用时间: 00: 00: 03.05Execution Plan----------------------------------------------------------0 SELECT STATEMENT OptimizerCHOOSE1 0 SORT (AGGREGATE)2 1 TABLE ACCESS (BY INDEX ROWID) OF XSTFXPS23 2 NESTED LOOPS4 3 TABLE ACCESS (FULL) OF XSTFXPS15 3 INDEX (RANGE SCAN) OF XSTFXPS2_PK (UNIQUE)Statistics----------------------------------------------------------0 recursive calls0 db block gets11974 consistent gets225 physical reads832 redo size211 bytes sent via SQL*Net to client275 bytes received via SQL*Net from client2 SQL*Net roundtrips to/from client0 sorts (memory)0 sorts (disk)1 rows processed我们可以看到逻辑IO由原来的17355138次下降到11974次有了数量级的提升。执行时间也有原来将近3分钟下降到现在的3秒多一些。很显然性能有了大幅的提升。不过我们看到执行计划里面表XSTFXPS1还是有一个全表扫描存在。通常来说我们应该尽量避免全表扫描的存在尤其对于大表应该建立合适的索引以避免FTS的产生。我们来看这两张表的索引信息select index_name,column_name from dba_ind_columns where table_name like XSTFXPS%INDEX_NAME COLUMN_NAME------------------------------ -----------------------------------XSTFXPS1_PK DHAO00XSTFXPS2_PK DHAO00XSTFXPS2_PK SPDM00我们看到这两张表除了主键约束外都没有建另外的索引。根据语句的查询情况我们建立了如下的复合索引create index idx_xstfxps1_khdm00_ywrq00 on xstfxps1(khdm00,ywrq00) tablespace indx;为了使用索引我们必须对原来的日期字段的条件进行一些调整。因为有个trunc()函数的存在语句将不会使用到索引。我们只要明白trunc(ywrq00)trunc(sysdate)事实上等同于ywrq00大于trunc(sysdate)小于trunc(sysdate1)减去一秒我们就有了比较好的办法来处理这个条件。最终改写后的语句如下select sum(sl0000)from xstfxps2 a, xstfxps1 bwhere a.dhao00b.dhao00and b.khdm00500000003913and b.ywrq00 between trunc(sysdate)and trunc(sysdate)1-1/(24*60*60);Execution Plan----------------------------------------------------------0 SELECT STATEMENT OptimizerCHOOSE1 0 SORT (AGGREGATE)2 1 TABLE ACCESS (BY INDEX ROWID) OF XSTFXPS23 2 NESTED LOOPS4 3 TABLE ACCESS (BY INDEX ROWID) OF XSTFXPS15 4 INDEX (RANGE SCAN) OF IDX_XSTFXPS1_KHDM00_YWRQ00(NON-UNIQUE)6 3 INDEX (RANGE SCAN) OF XSTFXPS2_PK (UNIQUE)Statistics----------------------------------------------------------0 recursive calls0 db block gets3 consistent gets0 physical reads0 redo size210 bytes sent via SQL*Net to client275 bytes received via SQL*Net from client2 SQL*Net roundtrips to/from client0 sorts (memory)0 sorts (disk)1 rows processed我们这时候看逻辑IO已经降为3次语句的执行计划也符合我们的调整目标创建的索引产生了比较大的效果。这条语句的调整至此告一段落。相关文章 第一步创建一个表、第二步创建一个自增序列以此提供调用函数、第三步我们通过创建一个触发器使调用的方式更加简单2013-11-11当数据库或PL/SQL在运行时发生错误时一个异常被PL/SQL运行时引擎自动抛出,oracle有三种方式抛出异常需要了解的朋友可以祥看本文2012-12-12Oracle数据库处理多媒体信息...2007-03-03这篇文章主要介绍了CentOS命令行下装oracle 12c的方法(命令行模式安装),需要的朋友可以参考下2016-09-09今天小编就为大家分享一篇关于oracle常用分析函数与聚合函数的用法小编觉得内容挺不错的现在分享给大家具有很好的参考价值需要的朋友一起跟随小编来看看吧2019-01-01批量导入文本文件在Oracle数据库操作中经常遇见今天给大家介绍一种通过sqlldr批处理实现的方法有需要的朋友们可以参考借鉴下面来一起看看。2016-09-09这篇文章主要介绍了Oracle 日志挖掘(LogMiner)使用非常不错具有一定的参考借鉴价值,需要的朋友可以参考下2018-07-07本篇文章是对系统重装后Oracle数据库完全恢复的解决办法进行了详细的分析介绍需要的朋友参考下2013-06-06这篇文章主要介绍了Orcale 数据库客户端PL/SQL 中文乱码的问题解决方法,需要的朋友可以参考下2014-05-05这篇文章主要介绍了Oracle用decode函数或CASE-WHEN实现自定义排序功能本文通过实例代码给大家介绍的非常详细具有一定的参考借鉴价值,需要的朋友可以参考下2020-05-05最新评论