相关文章推荐
独立的胡萝卜  ·  英超自17-18赛季以来门将扑救榜:皮克福德 ...·  1 月前    · 
刚毅的青蛙  ·  使用awk排除第一行和第二行的数据-CSDN博客·  2 年前    · 
坏坏的甜瓜  ·  52岁傅艺伟感情生活曝光:离婚16年后未再婚 ...·  2 年前    · 
爽快的春卷  ·  python截取最后一个逗号后面的_mob6 ...·  2 年前    · 
爱搭讪的蚂蚁  ·  斗罗:同是蓝银草武魂,为何唐三会成神,而唐雅 ...·  2 年前    · 
Code  ›  mysql聚合统计数据查询缓慢优化方案开发者社区
大数据 sql优化 云数据 优化
https://cloud.tencent.com/developer/article/1555641
跑龙套的蚂蚁
2 年前
宣言言言
0 篇文章

mysql聚合统计数据查询缓慢优化方案

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
最新优惠活动
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
宣言言言
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
社区首页 > 专栏 > 宣言(Siam)博客 > mysql聚合统计数据查询缓慢优化方案

mysql聚合统计数据查询缓慢优化方案

作者头像
宣言言言
发布 于 2019-12-18 15:55:49
5.7K 0
发布 于 2019-12-18 15:55:49
举报

写在前面

在我们日常操作数据库的时候,比如订单表、访问记录表、商品表的时候。

经常会处理 计算数据列总和、数据行数 等统计问题。

随着业务发展,这些表会越来越大,如果处理不当,查询统计的速度也会越来越慢,直到业务无法再容忍。

所以,我们需要先了解、思考这些场景知识点,在设计之初,便预留一些优化空间支撑业务发展。

sql聚合函数

在mysql等数据中,都会支持聚合函数,方便我们计算数据。

常见的有以下方法

取平均值 AVG()
求和 SUM() 
最大值 MAX()
最小值 MIN()
行数 COUNT() 

演示几个简单使用的sql语句:

查询u_id为100的订单总数

select count(id) from orders where u_id = 100;

查询u_id为100的订单消费总和

select sum(order_amount) from orders where u_id = 100;

查询销量最高的商品

select max(sell_num) from goods

统计7月份的订单数量、金额总和

select count(id) as count, sum(order_amount) as total_amount from orders where order_date between 20190701 and 20190731 and is_pay = 1

如果此时,订单表的总数是1亿条。并且此条sql运行很慢,我们应该如何排查优化?

有的同学会说了:行数多,在日期字段上加 索引 ,这样子筛选就很快了。

总数1亿条,假设7月份的订单有1000万条,加了索引的时候,筛选速度自然会提升不少。但是此时我们的问题真的解决了吗?

在这种聚合函数中,结果需要 遍历每一条 数据来计算,比如我们统计订单总和,就需要每一行都读取订单金额,然后加起来。

也就是说在这条统计sql中,需要先从1亿数据中筛选1000万条数据,然后再遍历这些数据来计算。 此时就会非常慢了。

增加索引并不能解决聚合函数统计慢的问题

优化聚合统计的方案

提前预算

建立 统计数据表 ,以日期区分,如:20190801一天,销售了多少订单、金额等等数据。

当订单产生(支付完成后 可统计数据)时,便在统计数据表中对应的日期增加金额、数量。

需要注意的是,如果有退款等场景会影响减少数据,记得也相应地做操作处理

当我们需要统计8月份的数据时候,则只需要遍历计算这一个月的三十来行数据。

定时落地

我们可以使用easyswoole、计划任务等。来定时(比如每20分钟一次)计算总和,然后更新到 统计数据表 中。

优点:做的处理比较少,也无需改动退款操作等api,只需要依赖 原订单表 的数据,定时统计、刷新统计数据。

需要注意的是,根据不同的订单热度,来设置不同的落地频率,比如 一周内的数据变化几率比较大,可能20分钟落地。而一年前的数据则变化几率很小,可以选择某天同步一次,甚至确保不会变动时,则不再刷新。

总结

  • 索引并不能解决统计聚合数据慢的sql语句问题
  • 聚合函数谨慎用 最好不用,因为我们无法预算以后的数据量需要扫描多少行数据来计算
  • 优化方案离不开统计表,都需要按一定的周期储存运算好的统计数据
本文参与 腾讯云自媒体分享计划 ,分享自作者个人站点/博客。
原始发表:2019.08.23, 如有侵权请联系 cloudcommunity@tencent.com 删除
sql
编程算法
费用中心

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!

sql
编程算法
费用中心
评论
登录 后参与评论
0 条评论
热度
最新
登录 后参与评论
关于作者
宣言言言
PHP
0
文章
0
累计阅读量
0
获赞
前往专栏
目录
  • 写在前面
  • sql聚合函数
  • 优化聚合统计的方案
    • 提前预算
      • 定时落地
      • 总结
领券
  • 社区

    • 专栏文章
    • 阅读清单
    • 互动问答
    • 技术沙龙
    • 技术视频
    • 团队主页
    • 腾讯云TI平台
  • 活动

    • 自媒体分享计划
    • 邀请作者入驻
    • 自荐上首页
    • 技术竞赛
  • 资源

    • 技术周刊
    • 社区标签
    • 开发者手册
    • 开发者实验室
  • 关于

    • 社区规范
    • 免责声明
    • 联系我们
    • 友情链接

腾讯云开发者

扫码关注腾讯云开发者

扫码关注腾讯云开发者

领取腾讯云代金券

热门产品

  • 域名注册
  • 云服务器
  • 区块链服务
  • 消息队列
  • 网络加速
  • 云数据库
  • 域名解析
  • 云存储
  • 视频直播

热门推荐

  • 人脸识别
  • 腾讯会议
  • 企业云
  • CDN加速
  • 视频通话
  • 图像分析
  • MySQL 数据库
  • SSL 证书
  • 语音识别

更多推荐

  • 数据安全
  • 负载均衡
  • 短信
  • 文字识别
  • 云点播
  • 商标注册
  • 小程序开发
  • 网站监控
  • 数据迁移

Copyright © 2013 - 2023 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有

深圳市腾讯计算机系统有限公司 ICP备案/许可证号: 粤B2-20090059 深公网安备号 44030502008569

腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287

问题归档 专栏文章 快讯文章归档 关键词归档 开发者手册归档 开发者手册 Section 归档

Copyright © 2013 - 2023 Tencent Cloud.

All Rights Reserved. 腾讯云 版权所有

登录 后参与评论
 
推荐文章
独立的胡萝卜  ·  英超自17-18赛季以来门将扑救榜:皮克福德第1,德赫亚上榜 - 麻将胡了2
1 月前
刚毅的青蛙  ·  使用awk排除第一行和第二行的数据-CSDN博客
2 年前
坏坏的甜瓜  ·  52岁傅艺伟感情生活曝光:离婚16年后未再婚-搜狐娱乐
2 年前
爽快的春卷  ·  python截取最后一个逗号后面的_mob649e81630984的技术博客_51CTO博客
2 年前
爱搭讪的蚂蚁  ·  斗罗:同是蓝银草武魂,为何唐三会成神,而唐雅却成了邪魂师?|唐门|门主_网易订阅
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号