SQL调优--记一次表统计信息未及时更新导致查询超级慢
某日同事丢给我一个看上去复杂的查询(实际就涉及两张表,套来套去)说只是换了日期条件,但一个查询5秒出数据,一个根本查不出来。现在整理下解决过程,及涉及的知识点。
若有不正之处,请多多谅解并欢迎批评指正,不甚感激。
请尊重作者劳动成果,转载请标明原文链接:
http://www.cnblogs.com/zzry/p/5857751.html
一.问题描述
环境:sqlserver 2008r2
现象:
查询涉及到两张表
ODS_TABLE_A 每日数据700万现在总计60多亿。 已建立索引+分区
MID_TABLE_B 每日数据20万 总计3000万。 已建立索引未分区
当etldate为 '2016-08-12' 及以前的时间时,本查询5秒出数据,
当etldate为 '2016-08-16' 及以后的时间时,本查询出不来数据。
贴上问题sql:做过数据字段处理,针对本篇主题注意点放在查询因为日期的选择不同导致查询时间变的超级慢,而不是改变sql写法比如用临时表,强制索引上。
----------《代码开始》
select COUNT(distinct(case when COL_USERID3 is null then COL_USERID6 end)) as 'aa',COUNT(distinct(case when COL_USERID3 is null and COL_USERID7 is not null then COL_USERID6 end)) as 'bb',COUNT(distinct(case when COL_USERID3 is not null then COL_USERID6 end)) as 'cc',COUNT(distinct(case when COL_USERID3 is not null and COL_USERID7 is not null then COL_USERID6 end)) as 'dd',SUM(case when COL_USERID3 IS not null then ee end) as 'ee'from(select c.COL_USERID3,c.ee,g.COL_USERID6from(select b.COL_USERID2 as COL_USERID3,COUNT(b.COL_USERID2) as eefrom(select COL_USERID as COL_USERID1,min(EventTime) as time1from ODS_TABLE_A where EtlDate = '2016-08-12'and colid LIKE 'heihei%'group by COL_USERID)as ajoin(select COL_USERID as COL_USERID2,eventtime as time2from ODS_TABLE_A where EtlDate = '2016-08-12'and ItemId = '1111111111101'and colid like 'haha-%'and colid not like 'haha-skill%'and colid not like 'haha-fine%')as b on a.COL_USERID1 = b.COL_USERID2 and a.time1 > b.time2group by b.COL_USERID2)as cright join(select DISTINCT d.COL_USERID4 as COL_USERID6from( select distinct COL_USERID as COL_USERID4from MID_TABLE_B where etldate = '2016-08-12' )as djoin(select COL_USERID AS COL_USERID5from ODS_TABLE_A where EtlDate = '2016-08-12'and colid LIKE 'heihei%')as f on d.COL_USERID4 = f.COL_USERID5)as gon c.COL_USERID3 = g.COL_USERID6)as ileft join (select COL_USERID as COL_USERID7from MID_TABLE_Bwhere EtlDate = '2016-08-12' and IsTodayPay = '1')as hon i.COL_USERID6 = h.COL_USERID7
----------《代码结束》
二。解决过程
1.先看了下上述代码的执行计划如下图初看上去需要用索引的地方都用到了。应该没啥大问题。
可能你注意到系统提示的缺少索引信息,加上去一样效果,不能解决‘2016-08-16’ 查询慢的问题。
三。总结
对于大表新插入的数据没及时更新统计信息,导致出现上面文中的现象,一个日期导致查询效率天壤之别的分水岭(查12号前5秒出数据,查12号后死活不出来。)
解决办法是大表自动更新统计信息触发自动更新机制频率不够,定期更新。
转载于:https://www.cnblogs.com/firstdream/p/7932265.html
SQL调优--记一次表统计信息未及时更新导致查询超级慢相关推荐
- 数据库性能调优之始: analyze统计信息
摘要:本文简单介绍一下什么是统计信息.统计信息记录了什么.为什么要收集统计信息.怎么收集统计信息以及什么时候收集统计信息. 1 WHY:为什么需要统计信息 1.1 query执行流程 下图描述了Gau ...
- 统计信息自动更新导致查询超时
数据库有个大的接口日志表InterfaceRecord,表中有XML字段保存了接口报文,每个月新增6000多万的数据(大约300多GB),数据库有个JOB每周日晚上定时把表中1个月前的数据归档到历史库 ...
- mysql报表统计 优化_关于SQL调优与报表的性能优化
前一段时间做了某产品实时统计的报表,这周在对报表性能进行优化. 其中逐步积累了一些优化经验,总结一下记录下来,欢迎大家一起探讨. 本文仅限于探讨单个数据库的查询sql及统计报表调优,不涉及分布式数据库 ...
- 更新SQL Server实例所有数据库表统计信息
引出问题 自从上次菜鸟为老鸟解决了<RDS SQL SERVER 解决中文乱码问题>问题,老鸟意犹未尽,决定再想个招来刁难刁难菜鸟:"我最近做T-SQL性能调优的时候,经常发现执 ...
- SQL调优与报表的性能优化
原文链接:https://www.iteye.com/blog/shensy-1664549 作者:shensy 一.SQL调优: 1.提升统计查询性能,首当其冲当然还是对查询SQL进行优化,说到 ...
- Mysql排序添加名词_记面试中问到的MySQL的SQL调优问题
目录 1.场景还原 2.名词解释 3.实践情况 4.个人观点 5.引申问题 1.场景还原 面试官:小伙子,听说你会SQL调优,那我这里有一条SQL,你来帮我调优一下.SQL如下: SELECT * F ...
- oracle避免回表,请教大家: 经常在sql调优过程中提到避免“回表”,具体是指什么意思???3Q...
你的位置: 问答吧 -> Oracle -> 问题详情 请教大家: 经常在sql调优过程中提到避免"回表",具体是指什么意思???3Q 如题,不甚感激!!!! [ 本帖 ...
- 记面试中问到的MySQL的SQL调优问题
目录 1.场景还原 2.名词解释 3.实践情况 4.个人观点 5.引申问题 1.场景还原 面试官:小伙子,听说你会SQL调优,那我这里有一条SQL,你来帮我调优一下.SQL如下: SELECT * F ...
- oracle trim 性能,ORACLE sql调优之记录一次trim函数引发的大表全表扫描
2017年8月14日,一地市oracle相关的调度程序ETL抽取速度奇慢,sql语句每次执行平均时间要9秒左右,如果所示: 该调度过程涉及的sql语句如下: select count(*) from ...
最新文章
- A股暴跌,户均亏2万!刚写好的辞职信又撕了……
- linux怎么修改grub引导顺序,我如何更改GRUB引导顺序?
- HDU_1075 What Are You Talking About(Trie 树)
- Java对二叉树的操作
- Spring Boot笔记-JPA中自定义@Query分页查询
- 远离复杂公式推导,直接解决共线性
- 异常详细信息: System.UnauthorizedAccessException: 对路径“”的访问被拒绝。
- 厦大计算机学院2018夏令营6,2018年厦门大学建筑与土木工程学院保研夏令营通知...
- hive sql 添加字段以及修改字段
- sobol灵敏度分析matlab_灵敏度分析 使用MATLAB编写
- 有软件测试台式电脑电源供电不足吗,电脑主机等电源供电不足的症状
- 多帧点云数据拼接合并_点云拼接
- ALS算法介绍(协同过滤算法介绍)
- java 代码块 构造函数_Java学习笔记之------构造函数,静态关键字,静态代码块,构造代...
- 个人miniblog被迫备份至此
- gps网络对时Linux,gps网络时间对时服务器的功能简介
- 服务器租用哪家的机房好
- 【Shader】实验06——后处理实现色散效果
- HTTP/3: 性能改进(第2部分)
- R语言实现向量自回归VAR模型