走在专家的路上,每天一条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统计信息如下:

索引相关信息如下:

从上面可以看到,该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多倍。

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

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java进阶架构师

「mysql优化专题」90%程序员都会忽略的增删改优化(2)

通常情况下,当访问某张表的时候,读取者首先必须获取该表的锁,如果有写入操作到达,那么写入者一直等待读取者完成操作(查询开始之后就不能中断,因此允许读取者完成操作...

682
来自专栏数据库

oracle常用命令大全

一、Oracle数据库实例、用户、目录及session会话查看: 1、ORACLE SID查看设置 查看SID、用户名 $ env|grep SID 、sele...

4027
来自专栏性能与架构

mysql 索引碎片修复

image.png 在长期的数据更改过程中,索引文件和数据文件,都会产生空洞和碎片,会降低索引的运行效率 查看碎片 SHOW TABLE STATUS LIKE...

3515
来自专栏维C果糖

出现 DB2 SQL Error: SQLCODE = -798, SQLSTATE = 428C9 错误的原因及解决方法

1 错误描述 在通过「DbVisualizer」执行 SQL 语句插入数据的时候,报出如下错误: ? 2 错误原因 通过观察上述标记出来的错误描述: DB2 ...

2275
来自专栏北京马哥教育

优化临时表使用,SQL语句性能提升100倍

【问题现象】 线上mysql数据库爆出一个慢查询,DBA观察发现,查询时服务器IO飙升,IO占用率达到100%, 执行时间长达7s左右。 SQL语句如下: SE...

2958
来自专栏Java编程技术

Mysql中INSERT ... ON DUPLICATE KEY UPDATE的实践

在日常业务开发中经常有这样一个场景,首先创建一条记录,然后插入到数据库;如果数据库已经存在同一主键的记录,则执行update操作,如果不存在,则执行insert...

1073
来自专栏用户2442861的专栏

关于sql中索引的优缺点(面试常考)

   原文       http://blog.csdn.net/dinglang_2009/article/details/5951428

1421
来自专栏Laoqi's Linux运维专列

Mysql 通过全量备份和binlog恢复整体数据

9527
来自专栏数据和云

INTERVAL分区升级了,你知道吗?!

辑手记: Oracle 11g新增的INTERVAL分区使得手工给RANGE分区添加新分区的工作变得异常简单,这也使得INTERVAL分区成为RANGE分区的最...

2945
来自专栏Django Scrapy

mysql相关命令

安装 在ubuntu 14.04 x64下 1 安装 # 安装服务端 (需要中途设置root密码) sudo apt-get install mysql-ser...

3267

扫码关注云+社区