mysql 单表 5 千万的数据量 , count(*) 耗时很长有办法优化吗

讨论 未结 13 37
rqxiao
rqxiao 会员 2022年8月26日 09:59 发表
收藏(0)  分享
相关标签: 灌水交流
注意:本文归作者所有,未经作者允许,不得转载
13个回复
  • chengyiqun
    2022年8月26日 09:59
    看你带条件了没, 条件是否走上索引了.
    0 0
  • MoYi123
    2022年8月26日 09:59
    据我所知 pg 是没有的, mysql 应该也没有.
    0 0
  • pannanxu
    2022年8月26日 09:59
    据说这样子可以 explain select id from project 或者如果数据量准确度不需要太高,可以直接把查出来的数量丢进缓存
    0 0
  • qq8331199
    2022年8月26日 09:59
    直接是没有办法的,就是慢 要么 redis 缓存这个 count ,先 count 一次,后面有增删,就去更新这个 count
    0 0
  • keepeye
    2022年8月26日 09:59
    正在显示第 0 - 24 行 (共 31392729 行, 查询花费 13.9842 秒。) SELECT count(*) FROM `orders` rds 8 核 16g 高可用实例
    0 0
  • sivacohan
    2022年8月26日 09:59
    select TABLE_ROWS from information_schema.TABLES where TABLE_SCHEMA = 'db' AND TABLE_NAME='tbl'; 不要求准确性的话,可以这么查询。
    0 0
  • keepeye
    2022年8月26日 09:59
    不求精确的话,并且能查询 mysql 库的话,可以读取 innodb_table_stats
    0 0
  • westoy
    2022年8月26日 09:59
    缓存啊 不过我感觉你可能表设计有问题或者硬盘 IO 被拖爆了? 再怎么慢,5000 万数据 17S 也有点离谱啊.......
    0 0
  • bootvue
    2022年8月26日 09:59
    这个数据量是时候考虑考虑 es clickhouse 这些了
    0 0
  • rqxiao
    2022年8月26日 09:59
    有 where 条件的,而且还比较多 SELECT COUNT(1) FROM tb_task <where> AND is_deleted = 0 AND data_type != 1 <if test="fileType != null and fileType != ''"> AND file_type = #{fileType}</if> <if test="fileSource != null"> AND file_source = #{fileSource}</if> <if test="auditStatus != null"> AND review_status = #{auditStatus}</if> <if test="auditStatus != null"> AND analysis_status = 2</if>
    0 0
  • MoYi123
    2022年8月26日 09:59
    建议直接说服产品, 分页改成一页页翻, 用上一页的主键去查下一页, 然后行数大于 10000 行直接显示 10000+. 基本只能这么做.
    0 0