Mysql大数据量统计优化

造成慢查询的例子

count(Db->table->select()

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

理想的光照不到现实的黑暗,明灯是黑夜中的奢侈品。如果你接受不了真实生活千疮百孔的消极,那么,请移步儿童区...
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 24
liuqing_hu

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

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

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

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

单表 千万级别数据库优化,忽略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
    …. 目前想不到了,欢迎补充
2年前 评论
working (楼主) 2年前
SanXiao

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

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

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

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

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

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

用 redis 统计可不可以呢

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

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

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

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

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

2年前 评论

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