走在专家的路上,每天优化一条SQL

本文讲的走在专家的路上,每天优化一条SQL,为了让大家更好地理解索引的常见和使用,我们拣选了工程师在客户现场做的一些真实的SQL优化,基于真实的业务场景,与大家分享。

每天一条SQL优化,帮你走在专家的路上。

SQL文本:

SELECT 'x'
  FROM MD3U.CARD_INFO A, MD3U.PERSON_INFO B
 WHERE GBRQ IS NULL
   AND NVL(KZT, '0') <> '0'
   AND FFDSX = 'F'
   AND A.RYID = B.RYID
   AND ROWNUM <= 300
   AND B.DQJBJGID = '37100501'
   AND KH IS NOT NULL

执行计划如下:

执行计划统计信息如下:

索引相关信息如下:

从上面可以看到,该SQL的总执行时间为336,973,478毫秒(ms)大概93.6小时(h),总执行次数为143,101次,平均一天执行大概13000次,从而可以判定是一个使用非常频繁的SQL查询。

因为执行次数比较多,所以总时间也非常大,单次执行时间大概2.3秒(s)。经下面优化验证从2.3秒改善为0.1秒,总执行时间会从93.6小时减少为0.1*143101/60/60 = 3.97小时左右。而且,与该SQL相似的SQL非常多,从排名中可以看到排名1、3的都与这个SQL相似。

所以只要优化了这个SQL,相似的SQL都可以进行优化。

**优化前,文本执行后的执行计划:

**建议创建索引的SQL如下:
CREATE INDEX md3u.KC47$AAZ198_AAC001 ON md3u.
KC47(AAZ198,AAC001) ONLINE;
CREATE INDEX md3u.AZ01$BKB004_AAZ512_AAZ500 ON
md3u.AZ01(AAC001,BKB004,AAZ512,AAZ500,AAZ502) ONLINE;

创建后,文本执行后的执行计划:

可以看到最终优化后:

执行时间从原来的1.01秒(s)变为0.1秒(s)
逻辑读从原来的143164变为37854
执行时间上性能提高10倍,逻辑读减少3.7倍。

原文发布时间为:2017-09-25
作者: 云和恩墨
本文来自合作伙伴“数据和云”,了解相关信息可以关注“数据和云”微信公众号

时间: 2024-09-17 03:57:50

走在专家的路上,每天优化一条SQL的相关文章

走在专家的路上,每天一条SQL优化(3)

本系列分享的SQL优化实例,并不一定适用于所有相似SQL或所有场景.我们只是介绍一种方法,当你再次遇到类似SQL,可以根据真实场景,选择最适合的方案.另外,有疑问的时候,最好的办法就是测试,动手才能找到最佳答案! SQL文本如下: SELECT NVL(SUM(SRE), 0) HRJE FROM MD3U.CARD_INCOME A WHERE YLGRZHH = '371081110630214389' AND DDQCSRH IS NULL AND ZDLSH IS NOT NULL AN

走在专家的路上,每天一条SQL优化(2)

每天坚持进步一点点,让优秀成为一种习惯. SQL文本如下: INSERT INTO BPZONE.EI_ADDITION (EID,ROOTPIID, ANCESTOREID, CREATETIME) SELECT E.ID_, E.PROC_INST_ID_, '.' || E.ID_ || '.' ANCESTOREID, SYSDATE FROM ACTIVITI.ACT_RU_EXECUTION E WHERE E.ID_ = E.PROC_INST_ID_ AND E.PARENT_I

从500万条数据中查询,求优化一条SQL语句

问题描述 表结构如下,里面有500W数据.我没有权限修改这个表,所以请大家给我优化下SQL查询CREATE TABLE IF NOT EXISTS `jdp_tb_trade` ( `tid` bigint(20) NOT NULL, `status` varchar(64) DEFAULT NULL, `type` varchar(64) DEFAULT NULL, `seller_nick` varchar(32) DEFAULT NULL, `buyer_nick` varchar(32)

高手快来啊,看看怎么优化这条sql,高手帮忙啊

问题描述 select'003'aszhangtao,convert(varchar(10),dbill_date,120)dbill_date,g.ccode,c.ccode_name,g.csign,g.ino_id,g.cdigest,g.ccode_equal,g.cdept_id,b.cDepName,g.cperson_id,p.cPersonName,g.ccus_id,cu.cCusName,g.csup_id,v.cVenName,g.citem_class,f.citem_n

[20151209]一条sql语句的优化(续).txt

[20151209]一条sql语句的优化(续).txt http://blog.itpub.net/267265/viewspace-1852195/ --上次提到其中1条sql语句: 1.环境: SYSTEM@192.168.99.105:1521/dbcn> @ver1 PORT_STRING                    VERSION        BANNER ------------------------------ -------------- -------------

[20131025]一条sql语句的优化.txt

[20131025]一条sql语句的优化.txt 最近在优化一条sql语句,做一个测试例子测试看看.遇到一些问题记录一下: 1.建立环境: SCOTT@test> @ver BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Productio

mysql优化21条经验(转)

今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序 员需要去关注的事情.当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能.这里,我们不会讲过多的 SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库.希望下面的这些优化技巧对你有用. 1. 为查询缓存优化你的查询 大多数的MySQL服务器都开启了查询缓存.这是提高性最有效的方法之一,而且这是被

Sql server优化:LECCO SQL Expert

SQL语句的优化是将性能低下的SQL语句转换成目的相同的性能优异的SQL语句. 人工智能自动SQL优化就是使用人工智能技术,自动对SQL语句进行重写,从而找到性能最好的等效SQL语句. 数据库性能的优化 一个数据库系统的生命周期可以分成:设计.开发和成品三个阶段.在设计阶段进行数据库性能优化的成本最低,收益最大.在成品阶段进行数据库性能优化的成本最高,收益最小. 数据库的优化通常可以通过对网络.硬件.操作系统.数据库参数和应用程序的优化来进行.最常见的优化手段就是对硬件的升级.根据统计,对网络.

MySQL性能优化 出题业务SQL优化_Mysql

先简单介绍一下项目背景.这是一个在线考试练习平台,数据库使用MySQL,表结构如图所示: Question是存储题目的表,数据量在3万左右.AnswerResult表是存储用户作答结果的表,分表之后单表记录大概在300万-400万. 需求:根据用户的作答结果出练习卷,题目的优先级为:未做过的题目>只做错的题目>做错又做对的题目>只做对的题目. 在"做错又做对的题目"中,会按错误次数和正确次数的比例进行权重计算,比如:A.做错10次,做对100次:B.做错10次,做对2