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

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

为了让大家更好地理解索引的常见和使用,我们拣选了工程师在客户现场做的一些真实的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倍。

原文发布于微信公众号 - 数据和云(OraNews)

原文发表时间:2017-09-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据和云

【云和恩墨大讲堂】Oracle线上嘉年华第二讲

编辑手记:Oracle线上嘉年华,正在持续分享中。本次的主题是系统割接中的SQL解析问题和结合业务的SQL优化改写技巧。 1 嘉宾介绍 小鱼(邓秋爽) 云和恩...

30360
来自专栏杨建荣的学习笔记

持续近7个小时的索引扫描的查询优化分析 (r5笔记第44天)

昨天客户的DBA反映有一个数据抽取的任务持续了很长时间最后超时退出了,让我看看有什么地方可以调优一下。 找到了对应的日志,发现在一个大表抽取的时候,抽取持续了将...

41750
来自专栏维C果糖

史上最简单的 MySQL 教程(十九)「范式」

在数据存储之后,凡是能够通过关系寻找出来的数据,坚决不再重复存储,范式的终极目标是减少数据冗余。

42680
来自专栏杨建荣的学习笔记

Oracle表中含有255列以上时需要注意的(r12笔记第77天)

今天看JL(Jonathan Lewis)的一篇文章,真是费了不少的脑细胞,玩Oracle几十年的老司机,看问题的角度和深度果然不一样,当时看他的大作《O...

434100
来自专栏数据之美

常用统计分析 SQL 在 AWK 中的实现

最近有需求需要本地处理一些临时的数据,用做统计分析。如果单纯的 MYSQL 也能实现, 不过一堆临时数据这样从 mysql 导来导去还是挺麻烦的,比较理想的选...

26890
来自专栏更流畅、简洁的软件开发方式

为or、in平反——or、in到底能不能利用索引?

  先说一个笑话,作为开场白。俺也换换风格试一试,呵呵。   在以前,有三个书生赶考,在路上遇到了一个算命先生,于是就问算命先生:我们三个人赶考,结果如何呀?...

246100
来自专栏有趣的Python和你

Python爬虫之Xpath学习问题解决用xpath方法爬取豆瓣图书top250分析总结

16040
来自专栏张戈的专栏

WordPress酷炫CSS3读者墙,排名按年度、本月、本周划分的小方法

WordPress 酷炫 CSS3 读者墙这个玩意一般不用我多说,大部分用 WordPress 的博主都了解过了,出自折子戏博客。 不过他这个读者墙的排行是按年...

40630
来自专栏数据和云

杀手SQL- 一条关于 &#39;Not in&#39; SQL 的优化案例

编辑手记:在 DBA 所优化的数据库环境中,绝大多数性能问题其实是由于 SQL 编写不当导致的。SQL 的世界无奇不有,今天我们一起见识一条让你绝对想吐血的杀手...

35360
来自专栏数据分析

SQL Server 性能优化之——系统化方法提高性能

1. 概述 在比较大的范围内找出能够大幅提高性能的区域,并且专注于分析这个区域,这是最有效的优化SQL Server性能的方式。否则,大量的时间和精力可能被浪费...

51260

扫码关注云+社区

领取腾讯云代金券