前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >走在专家的路上,每天优化一条SQL

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

作者头像
数据和云
发布2018-03-08 11:31:27
6070
发布2018-03-08 11:31:27
举报
文章被收录于专栏:数据和云

前段时间我们分享过一篇文章,巧用复合索引,有效降低系统IO,围绕B*Tree索引的使用,解读了如何合理地使用索引,尤其是复合索引,以及通过正确的索引类型来提高性能。

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

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

SQL文本:

代码语言:javascript
复制
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,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据和云 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档