10分钟小幅优化亿级数据查询

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

时间: 2024-11-06 18:05:31

10分钟小幅优化亿级数据查询的相关文章

Oracle亿级数据查询处理(数据库分表、分区实战)

大数据量的查询,不仅查询速度非常慢,而且还会导致数据库经常宕机(刚接到这个项目时候,数据库经常宕机o(╯□╰)o). 那么,如何处理上亿级的数据量呢?如何从数据库经常宕机到上亿数据秒查?仅以此篇文章作为处理的总结. 数据背景:下面是存放历史数据表的数据量,数据量确实很大,3亿多条.但这也仅仅是测试数据而已,因为客户端服务器上的数据可能远不止于此. 为什么说远不止于此呢?实际情况是这样的: 有一个实时数据表,THTF_TABLE_AI,以及历史数据表,THTF_TABLE_AI_HIS 实时数据表

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

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

[转]10分钟梳理MySQL知识点:揭秘亿级高并发数据库调优与最佳实践法则

转:https://mp.weixin.qq.com/s/RYIiHAHHStIMftQT6lQSgA 做业务,要懂基本的SQL语句: 做性能优化,要懂索引,懂引擎: 做分库分表,要懂主从,懂读写分离... 数据库的使用,是开发人员的基本功,对它掌握越清晰越深入,你能做的事情就越多. 今天我们用10分钟,重点梳理一遍以下几方面: 数据库知识点汇总: 数据库事务特性和隔离级别: 详解关系型数据库.索引与锁机制: 数据库调优与最佳实践: 面试考察点及加分项. 一.数据库的不同类型 1.常用的关系型数

亿级数据毫秒级查询!ElasticSearch是怎么做到的?

目录: 1. 一道面试题的引入: 2. 性能优化的杀手锏:Filesystem Cache 3. 数据预热 4. 冷热分离 5. ElasticSearch 中的关联查询 6. Document 模型设计 7. 分页性能优化 一道面试题的引入: 如果面试的时候碰到这样一个面试题:ElasticSearch(以下简称ES) 在数据量很大的情况下(数十亿级别)如何提高查询效率? 这个问题说白了,就是看你有没有实际用过 ES,因为啥?其实 ES 性能并没有你想象中那么好的. 很多时候数据量大了,特别是

亿级数据的高并发通用搜索引擎架构设计(转-张宴)

[文章作者:张宴 本文版本:v1.0 最后修改:2008.12.09 转载请注明原文链接:http://blog.zyan.cc/post/385/] 曾经在七月,写过一篇文章──<基于Sphinx+MySQL的千万级数据全文检索(搜索引擎)架构设计>, 前公司的分类信息搜索基于此架构,效果明显,甚至将很大一部分带Where条件的MySQL SQL查询,都改用了Sphinx+MySQL搜索.但是,这套架构仍存在局限:一是MySQL本身的并发能力有限,在200-300个并发连接下,查询 和更新就

数据库选型之亿级数据量并发访问(MySQL集群)

刘 勇  Email:[email protected] 简介 针对实际应用中并发访问MySQL的场景,本文采用多线程对MySQL进行并发读取访问,其中以返回用户所需的数据并显示在终端为测试结束节点,即将数据从MySQL集群读取后存储于客户端本地内存中.测试过程如下:分别针对4种应用场景,从10.20.50.100个线程对MySQL展开测试.测试结果表明:对场景1)一般的并发访问能够满足需求:对于场景2)和3)响应时间在分钟级,分别处于1-3分钟和10分钟左右:对于场景4)则经常会抛出异常,并且

10分钟梳理MySQL核心知识点

今天我们用10分钟,重点梳理一遍以下几方面: 数据库知识点汇总: 数据库事务特性和隔离级别: 详解关系型数据库.索引与锁机制: 数据库调优与最佳实践: 面试考察点及加分项. 一.数据库的不同类型 1.常用的关系型数据库 Oracle:功能强大,主要缺点就是贵 MySQL:互联网行业中最流行的数据库,这不仅仅是因为MySQL的免费.可以说关系数据库场景中你需要的功能,MySQL都能很好的满足,后面详解部分会详细介绍MySQL的一些知识点 MariaDB:是MySQL的分支,由开源社区维护,Mari

【转】Mongodb亿级数据量的性能测试

进行了一下Mongodb亿级数据量的性能测试,分别测试如下几个项目: (所有插入都是单线程进行,所有读取都是多线程进行) 1) 普通插入性能 (插入的数据每条大约在1KB左右) 2) 批量插入性能 (使用的是官方C#客户端的InsertBatch),这个测的是批量插入性能能有多少提高 3) 安全插入功能 (确保插入成功,使用的是SafeMode.True开关),这个测的是安全插入性能会差多少 4) 查询一个索引后的数字列,返回10条记录(也就是10KB)的性能,这个测的是索引查询的性能 5) 查

百亿级数据处理量的弹性调度容器平台

百亿级数据处理量的弹性调度容器平台 七牛云数据处理团队的容器技术实践经验 一.数据处理业务场景 首先介绍一下七牛数据处理业务的背景.七牛云目前平台上有超过 50 万家企业客户,图片超过 2000 亿张,累积超过 10 亿小时的视频. 用户把这些图片和视频存储在七牛上后会有一些数据处理方面的需求,如缩放.裁剪.水印等. 这些文件持续在线且数据种类多样,如果用户把这些文件在自己的基板上处理好后再上传到七牛,是非常不合算的事情.而七牛最先提供基于存储的数据处理功能方便用户去做数据处理,这些数据处理通常