走在专家的路上,每天一条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
AND NVL(CGBZ, '0') = '1'
AND NOTEXISTS (SELECT 'x'
FROM MD3U.BILL_MID B
WHERE B.ZDLSH = A.ZDLSH
AND B.DM = 'hbry'
AND B.C = '2')
AND NOTEXISTS (SELECT 'x'
FROM MD3U.BILL_MID C
WHERE C.ZDLSH = A.ZDLSH
AND C.DM = 'hrzh'
AND C.C = '2');
执行计划如下:
索引相关信息如下:
从上面可以看到,该SQL的总执行时间为111,452,436毫秒(ms)大概30.95小时(h),总执行次数为295,420次,平均一天执行26856次,从而可以判定也是一个使用非常频繁的SQL查询。因为执行次数比较多,所以总时间也非常大,但是单次执行时间并不是很长,只有大概0.37秒(s)。这个SQL还可以进行优化。
优化前,文本执行后的执行计划:
建议创建索引的SQL如下:
CREATE INDEX MD3U.idx_KC20_01 ON MD3U.KC20(AAE072,BKE021,BKE004) ONLINE;
CREATE INDEX MD3u.idx_KZ03_01 ON
MD3U.KZ03(AAZ905,BKE163) GLOBAL ONLINE ;
创建索引后,文本执行后的执行计划:
可以看到优化后,执行时间从原来的0.01秒(s)变为0.01秒(s),逻辑读从原来的82变为17,执行时间上性能没有提高,但是逻辑读减少大概4.8多倍。
原文发布时间为:2017-09-27
作者: 云和恩墨
本文来自云栖社区合作伙伴“数据和云”,了解相关信息可以关注“数据和云”微信公众号
最后更新:2017-09-27 15:34:21
上一篇:
基于Hadoop大数据分析应用场景与实战
下一篇:
智能语音质检系统如何做到深度跟踪分析客户
两学一做,基于区块链的智能合约技术
《数据结构与抽象:Java语言描述(原书第4版)》一2.2.1 可变大小数组
离线在CentOS上安装CDH
Java ???????????? ??????????????? ??? ?????????Adapter?????? (???)-??????-????????????-?????????
为什么 C 语言屹立不倒?
机房收费系统之上下机
大数据时代必修技能 阿里HBase又放出了哪些大招?
Android开发技巧:在TextView控件中单击链接弹出Activity
无线路由器与modem的IP冲突问题剖析及解决(家庭上网)
贵阳大数据交易所开创国内多个“之最”