走在专家的路上,每天优化一条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 条评论
登录 后参与评论

相关文章

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

一条全表扫描sql语句的分析 (r4笔记第32天)

今天在对生产系统做监控的时候,发现一个process的cpu消耗很高,抓取了对应的session和执行的sql语句。 发现是一个简单的update语句,这样一条...

3319
来自专栏Linyb极客之路

MYSQL性能优化

今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显。关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事...

843
来自专栏禁心尽力

一次浴火重生的MySQL优化(EXPLAIN命令详解)

一直对SQL优化的技能心存无限的向往,之前面试的时候有很多面试官都会来一句,你会优化吗?我说我不太会,这时可能很多人就会有点儿说法了,比如会说不要使用通配符*...

1825
来自专栏高性能服务器开发

数据库进阶4 Mysql 性能优化20个原则(2)

如果你的应用程序有很多 JOIN 查询,你应该确认两个表中Join的字段是被建过索引的。这样,MySQL内部会启动为你优化Join的SQL语句的机制。

722
来自专栏IT笔记

Solr如何使用游标进行深度分页查询

通常,我们的应用系统,如果要做一次全量数据的读取,大多数时候,采用的方式会是使用分页读取的方式,然而 分页读取的方式,在大数据量的情况下,在solr里面表现并...

4017
来自专栏C#

Oracle常用的SQL方法总结

 在项目中一般需要对一些数据进行处理,以下提供一些基本的SQL语句:    1.基于条件的插入和修改:需要在表中插入一条记录,插入前根据key标识判断。如果标识...

1939
来自专栏小怪聊职场

MySQL(四)|《千万级大数据查询优化》第一篇:创建高性能的索引(补充)

本文是MySQL(三)|《千万级大数据查询优化》第一篇:创建高性能的索引的一个补充。 主要包括如下几点:

922
来自专栏PHP实战技术

MySQL性能优化的最佳20+条经验

今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显。关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事...

33512
来自专栏Java3y

数据库面试题(开发者必看)

数据库常见面试题(开发者篇) ? ? 这里写图片描述 什么是存储过程?有哪些优缺点? 什么是存储过程?有哪些优缺点? 存储过程就像我们编程语言中的函数一样,封装...

3825
来自专栏架构师之路

或许你不知道的10条SQL技巧

这几天在写索引,想到一些有意思的TIPS,希望大家有收获。 一、一些常见的SQL实践 (1)负向条件查询不能使用索引 select * from order w...

36112

扫码关注云+社区