SQL优化(SQL TUNING)之10分钟完成亿级数据量性能优化(SQL调优)

前几天,一个用户研发QQ找我,如下:

自由的海豚。 16:12:01

岛主,我的一条SQL查不出来结果,能帮我看看不?

兰花岛主 16:12:10

多久不出结果?

自由的海豚 16:12:17

多久都没出结果,一直没看到结果过。

兰花岛主 16:12:26

呵呵,好。

兰花岛主 16:12:39

发下sql和执行计划。

自由的海豚 16:12:55

select n.c1, n.c2,n.c3,n.c4,n.c5
  from (select  count(t.c1), t.c1, t.c2,t.c3,t.c4,t.c5
          from tab1 t
         where t.c2 not in (‘val1‘,‘val2‘,‘val3‘,‘val4‘,‘val5‘)
         group by t.c1, t.c2,t.c3,t.c4,t.c5) n
 where not exists
 (select * from (
select  count(s.c2), s.c1, s.c2                     
  from (select m.c1, m.c2,m.c3,m.c4,m.c5
          from tab1 m
         where exists (select c1
                  from tab2 n
                 where c2 > sysdate - 14
                   and m.c1 = n.c1)
           and m.c1 is not null
           and m.c2 not in  (‘val1‘,‘val2‘, ‘val3‘, ‘val4‘, ‘val5‘)) s
 group by s.c1, s.c2) t1 where t1.c2 = n.c2)
   and n.c1 is not null;

兰花岛主 16:13:12

这两张表大吗?

自由的海豚 16:13:16

tab1小,tab2亿级以上,两周数据在几千万。

兰化岛主 16:13:22

OK。

兰花岛主 16:16:29

这么改下sql吧:

with t1 as(
select count(t.c1), t.c1,t.c2,t.c3,t.c4,t.c5
  from tab1 t
 where t.c2 not in (‘val1‘,‘val2‘,‘val3‘,‘val4‘,‘val5‘)
   and c1 is not null
 group by t.c1, t.c2,t.c3,t.c4,t.c5) 
select t1.c1,t1.c2,t1.c3,t1.c4,t1.c5
  from t1 
where not exists(
select /*+ use_hash(m,n)*/ m.c1, m.c2,m.c3,m.c4,m.c5
   from t1 m,tab2 n
  where n.c2 > sysdate - 14
    and m.c1 = n.c1
    and t1.c2 = m.c2);

兰花岛主 16:16:43

取下执行计划。

自由的海豚 16:16:57

好的。

自由的海豚 16:17:25

兰花岛主 16:17:57

好的,试试吧。

自由的海豚 16:19:28

出结果了,37s

兰花岛主 17:20:21

嗯,好。

兰花岛主 17:20:34

这样可以吗?

自由的海豚 17:20:47

可以了可以了

兰花岛主 17:21:11

嗯,好,那就先这样,不继续调了。

自由的海豚 17:21:30

恩 好的 谢谢岛主

兰花岛主 17:21:53

不客气,忙吧,有事儿联系。

自由的海豚 17:22:18

恩,您忙。。。

至此,对用户这个sql的优化结束,其实,这个语句应该还有优化的空间,只是,用户说可以了那就可以了,因为优化是无止境的,而且,更进一步优化也许会需要更进一步的信息,且有时会需要更大的改动,鉴于各方面因素,文中对语句和计划进行了处理,记录于此,共勉!

原文地址:https://www.cnblogs.com/lhdz_bj/p/8807377.html

时间: 2024-08-28 23:30:00

SQL优化(SQL TUNING)之10分钟完成亿级数据量性能优化(SQL调优)的相关文章

SQL优化(SQL TUNING)之10分钟完毕亿级数据量性能优化(SQL调优)

前几天.一个用户研发QQ找我,例如以下: 自由的海豚. 16:12:01 岛主,我的一条SQL查不出来结果,能帮我看看不? 兰花岛主 16:12:10 多久不出结果? 自由的海豚 16:12:17 多久都没出结果,一直没看到结果过. 兰花岛主 16:12:26 呵呵.好. 兰花岛主 16:12:39 发下sql和运行计划. 自由的海豚 16:12:55 select n.c1, n.c2,n.c3,n.c4,n.c5 from (select  count(t.c1), t.c1, t.c2,t

数据库优化 | 亿级数据量系统数据库性能优化方案

一.数据库性能瓶颈主要原因 1.数据库连接 MySQL数据库默认连接为100,我们可以通过配置initialSize.minIdle.maxActive等进行调优,但由于硬件资源的限制,数据库连接不可能无限制的增加,对大型单体应用单实例数据库可能会出现最大连接数不能满足实际需求的情况,这时就会系统业务阻塞. 2.表数据量大(空间存储问题) 普遍观点认为单表数据量超过1000万条时就是出现数据库读取性能瓶颈.从索引角度分析,如果索引未被命中,数据库系统就会全表扫描,数据量越大,扫描全表的时间就会越

MySQL性能调优与架构设计——第10章 MySQL数据库Schema设计的性能优化

第10章 MySQL Server性能优化 前言: 本章主要通过针对MySQL Server(mysqld)相关实现机制的分析,得到一些相应的优化建议.主要涉及MySQL的安装以及相关参数设置的优化,但不包括mysqld之外的比如存储引擎相关的参数优化,存储引擎的相关参数设置建议将主要在下一章“常用存储引擎的优化”中进行说明. 10.1 MySQL 安装优化 选择合适的发行版本 1. 二进制发行版(包括RPM等包装好的特定二进制版本) 由于MySQL开源的特性,不仅仅MySQL AB提供了多个平

快速定位隐蔽的sql性能问题及调优【转载】

在前几天,有个开发同事问我一个问题,其实也算是技术救援,他说在有个job数据处理的频率比较高,在测试环境中很难定位出在哪有问题,而且速度也还能接 受,但是在生产环境中总是会慢一些,希望我能在测试环境中协助他们,看看是不是sql语句出什么问题了还是其它相关的问题. 这种类似实时监控的语句,从第一印象来说,很可能通过awr捕获不到,如果通过ash来捕获,因为测试环境中有几十套测试环境在运行,就算得到某个时间点 的一些sql语句,直接在报告中映射到语句对应的schema信息还是有一些困难的.因为测试时

( 转)从四分钟到两秒——谈谈客户端性能优化的一些最佳实践

转:http://www.cnblogs.com/marvin/p/WinformOptimizSkill.html 背景 最近跟售后经理吃饭,他跟我再次谈起两年前为公司临时写的一个客户端,仍然非常激动的跟我说,这个客户端完爆了公司其他版本的客户端,包括最老的Delphi写的,Asp.Net写的,以及最新的Wpf写的客户端.无论是多么大的界面(集成的机房多),这个系统都是瞬间打开,而且运行非常稳定,一旦成功部署之后基本没有任何问题. 这个版本的客户端仅仅只是一个临时替代的版本:原来的Delphi

MYSQL千万级数据量的优化方法积累

1.分库分表 很明显,一个主表(也就是很重要的表,例如用户表)无限制的增长势必严重影响性能,分库与分表是一个很不错的解决途径,也就是性能优化途径,现在的案例是我们有一个1000多万条记录的用户表members,查询起来非常之慢,同事的做法是将其散列到100个表中,分别从members0到members99,然后根据mid分发记录到这些表中,牛逼的代码大概是这样子: <?php for($i=0;$i< 100; $i++ ){ //echo "CREATE TABLE db2.mem

Linux性能优化从入门到实战:07 CPU篇:CPU性能优化方法

性能优化方法论 ??动手优化性能之前,需要明确以下三个问题: ??(1)如何评估性能优化的效果? 确定性能的量化指标.测试优化前的性能指标.测试优化后的性能指标. ??量化指标的选择.至少要从应用程序和系统资源这两个维度,分别选择不同的指标:1)应用程序的维度,我们可以用吞吐量和请求延迟来评估应用程序的性能.2)系统资源的维度,我们可以用 CPU 使用率来评估系统的 CPU 使用情况. ??行性能测试注意点:1)避免性能测试工具干扰应用程序的性能:2)避免外部环境的变化影响性能指标的评估. ??

笔记《Java程序性能优化 让你的Java程序更快、更稳定》 第二章 设计调优

2.1 善用设计模式 23 (1) 1. 设计模式好处: 2.1.1 单例模式 23 (6) 1. 单例模式是一种对象创建模式,用于产生一个对象的具体实例,它可以确保系统中一个类只产生一个实例: 2. 两大好处:a.对于频繁创建的对象,可以省略创建对象所花费的时间:b.new操作减少,因而对系统内存的使用频率也会降低,降低GC压力,缩短GC停顿时间: 3. 单例模式的参与者:单例类和使用者: 4. 第一种实现方式:私有默认构造器,静态getInstance方法:这种实现方式简单.可靠,但不能延迟

Java程序性能优化——性能调优层次

为了提升系统性能,开发人员可以从系统的各个角度和层次对系统进行优化.除了最常见的代码优化外,在软件架构上.JVM虚拟机层.数据库以及操作系统层都可以通过各种手段进行调优,从而在整体上提升系统的性能. 设计调优 设计调优处于所有调优手段的上层,它往往需要在软件开发之前进行.在软件开发之初,软件架构师就应该评估系统可能存在的各种潜在的问题,并给出合理的设计方案.由于软件设计和架构对软件整体有决定性的影响,所以,设计调优对系统性能的影响也是最大的.如果说,代码优化.JVM优化都是对系统微观层面上"量&