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

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

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

    前几天.一个用户研发QQ找我,例如以下: 自由的海豚. 16:12:01 岛主,我的一条SQL查不出来结果,能帮我看看不? 兰花岛主 16:12:10 多久不出结果? 自由的海豚 16:12:17 多 ...

  2. (转载)MYSQL千万级数据量的优化方法积累

    转载自:http://blog.sina.com.cn/s/blog_85ead02a0101csci.html MYSQL千万级数据量的优化方法积累 1.分库分表 很明显,一个主表(也就是很重要的表 ...

  3. NEO4J亿级数据全文索引构建优化

    NEO4J亿级数据全文索引构建优化 一.数据量规模(亿级) 二.构建索引的方式 三.构建索引发生的异常 四.全文索引代码优化 1.Java.lang.OutOfMemoryError 2.访问数据库时 ...

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

    第10章 MySQL Server性能优化 前言: 本章主要通过针对MySQL Server(mysqld)相关实现机制的分析,得到一些相应的优化建议.主要涉及MySQL的安装以及相关参数设置的优化, ...

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

    在前几天,有个开发同事问我一个问题,其实也算是技术救援,他说在有个job数据处理的频率比较高,在测试环境中很难定位出在哪有问题,而且速度也还能接 受,但是在生产环境中总是会慢一些,希望我能在测试环境中 ...

  6. 原博客地址http://blog.chinaunix.net/uid/20656672.html不再维护(10年前数百篇oracle/teradata性能优化、故障处理案例)

    原博客地址http://blog.chinaunix.net/uid/20656672.html不再维护(数百篇oracle/teradata性能优化.故障处理原创文章) 858871 top 500 ...

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

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  8. BayaiM__MYSQL千万级数据量的优化方法积累__初级菜鸟

      -----------------------------------------------------------------------------———————-------------- ...

  9. 分库代价高的情况下,如何优化ES解决亿级数据量检索

    数据平台已迭代三个版本,从一开始遇到很多常见的难题,到现在终于有片段时间整理一些已完善的文档,在此分享以供所需朋友的实现参考,但愿能帮助大家少走些弯路,在此篇幅中偏重于ElasticSearch的优化 ...

随机推荐

  1. 配置CNPM-基础案例

    下面给出一个样例配置: JavaScript module.exports = { enableCluster: true, database: { db: "snpm", use ...

  2. 1-5 hibernate学习笔记(11-14章)

    一,概念详解 1.持久化persistent 是指将内存中的数据保存到磁盘.数据库等存储设备中. 2.持久化对象:已经储存到磁盘或者数据库中的业务对象. 3.在java中对对象的持久化有三种方法: 1 ...

  3. 笔记:Spring Cloud Feign Hystrix 配置

    在 Spring Cloud Feign 中,除了引入了用户客户端负载均衡的 Spring Cloud Ribbon 之外,还引入了服务保护与容错的工具 Hystrix,默认情况下,Spring Cl ...

  4. USB Audio设计与实现

    1 前言 本文将基于STM32F4 Discovery板,从零开始设计并实现一个USB Audio的例子. 2 设计构思 所谓的USB AUDIO就是制作一个盒子,这个盒子可以通过USB连接到PC,P ...

  5. JWT 简介

    JWT是一种用于双方之间传递安全信息的简洁的.URL安全的表述性声明规范.JWT作为一个开放的标准(RFC 7519),定义了一种简洁的,自包含的方法用于通信双方之间以Json对象的形式安全的传递信息 ...

  6. java中的notify和notifyAll有什么区别?

    先说两个概念:锁池和等待池 锁池:假设线程A已经拥有了某个对象(注意:不是类)的锁,而其它的线程想要调用这个对象的某个synchronized方法(或者synchronized块),由于这些线程在进入 ...

  7. php中require、require_once、include、include_once类库重复引入效率问题详解

    首先我详细说下这四个引入函数 include() 与require() 的功能相同 唯一不同:require()不管是否被执行,只要存在,php在执行前都会预引入,include()则是执行到该语句时 ...

  8. python全栈学习--day4

    列表 说明:列表是python中的基础数据类型之一,它是以[]括起来,每个元素以逗号隔开,而且他里面可以存放各种数据类型比如:   1 li = ['alex',123,Ture,(1,2,3,'wu ...

  9. SpringMVC DispatcherServlet 启动和加载过程(源码调试)

    在阅读本文前,最好先阅读以下内容(当然,如果对 Servlet 已经有所了解,则可跳过): http://www.cnblogs.com/cyhbyw/p/8682078.html http://ww ...

  10. 【MySql系列】MySql踩坑系列

    问题一:远程登录报错Host '192.168.181.201' is not allowed to connect to this MySQL server 解决: 问题二:MySql access ...