Mysql大数据量统计优化

造成慢查询的例子

count(Db->table->select()

如题,百万千万级以上数据量查询时优化,排除分库分表分页等方法,只优化查询速度,有什么最优解,我能想到的是定时任务每天凌晨把今天之前的数据统计存在缓存中,统计时获取缓存数据再加上今天的数据量(添加数据不多的情况下),各位还有其他优化方法么?或者说其他的查询?

一个偏向心理学即将转向产品的码农
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 24
liuqing_hu

现在业务么?现在纯查询时间多久,执行计划发下

3年前 评论
working (楼主) 3年前
chowjiawei

如果你有很多范围查询啊 什么的 把查询结果的id拿去缓存 然后下次查询查询就用id 索引查询 很快

3年前 评论
working (楼主) 3年前
chowjiawei (作者) 3年前
working (楼主) 3年前
pi_phq 3年前

单表 千万级别数据库优化,忽略cpu,内存,硬盘性能瓶颈问题

  1. text 类型数据单独分出去
  2. 根据查询条件创建合适的索引,复合索引、覆盖索引,唯一索引等
  3. 尽量减少 join 查询
  4. 优化 sql 查询语句,如:
    select  * from  t  where id in (select id from t where  create_time between 'xxx'  and  'xxxx'   limit 7654321,50)
  5. 增加查询缓存(不太适用,多个人同时统计,又是首次,可能就gg了)
  6. 增加中间统计表,按小时,天等来区分,根据需求来弄,
  7. 6 增加的问题,有了中间统计表,无法体现当天实时数据,如查询 3天,7填内的,可以做个拼接,前两天+当天的数据
  8. 添加时间查询区间
  9. 多用 explain
    …. 目前想不到了,欢迎补充
3年前 评论
working (楼主) 3年前
SanXiao

这时候就很有必要做数据冗余了

3年前 评论
working (楼主) 3年前

你的思路是对的,只要是统计相关的,都不能扫表查询,数据量一大,请求数量多,很容易把表锁死。
建统计表,统计每日数据,往日的去查统计表就可以了,今日的去才去查数据表。

3年前 评论
working (楼主) 3年前
保安 3年前
九霄道长

若只统计人数等信息,是否可以单独开一个表进行维护,当前总数,注册新用户后 + 1; 或 redis 代替 mysql 获取当前数 +1

3年前 评论
working (楼主) 3年前

用 redis 统计可不可以呢

3年前 评论
working (楼主) 3年前

统计时获取缓存数据再加上今天的数据量

只用 redis 就可以吧,每新增一条数据 redis 就加一,就不需要缓存和 DB 加起来了

3年前 评论
kis龍 3年前
九霄道长 3年前
kis龍 3年前

千万的话得考虑优化成列式存储了,hbase

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!