|  |      1C02TobNClov1Dz56      2022-08-26 17:39:25 +08:00 看你带条件了没, 条件是否走上索引了. | 
|  |      2MoYi123      2022-08-26 17:44:47 +08:00 据我所知 pg 是没有的, mysql 应该也没有. | 
|  |      3KouShuiYu      2022-08-26 17:46:45 +08:00 换成 count(1) 然后加上索引 | 
|  |      4pannanxu      2022-08-26 17:47:05 +08:00 据说这样子可以 explain select id from project 或者如果数据量准确度不需要太高,可以直接把查出来的数量丢进缓存 | 
|      5qq8331199      2022-08-26 17:47:50 +08:00 直接是没有办法的,就是慢 要么 redis 缓存这个 count ,先 count 一次,后面有增删,就去更新这个 count | 
|  |      6keepeye      2022-08-26 17:47:50 +08:00 正在显示第 0 - 24 行 (共 31392729 行, 查询花费 13.9842 秒。) SELECT count(*) FROM `orders` rds 8 核 16g 高可用实例 | 
|  |      7sivacohan PRO select TABLE_ROWS from information_schema.TABLES  where TABLE_SCHEMA = 'db' AND TABLE_NAME='tbl'; 不要求准确性的话,可以这么查询。 | 
|  |      8keepeye      2022-08-26 17:50:09 +08:00 不求精确的话,并且能查询 mysql 库的话,可以读取 innodb_table_stats | 
|  |      9westoy      2022-08-26 17:50:25 +08:00 缓存啊 不过我感觉你可能表设计有问题或者硬盘 IO 被拖爆了? 再怎么慢,5000 万数据 17S 也有点离谱啊....... | 
|      10bootvue      2022-08-26 17:51:15 +08:00 这个数据量是时候考虑考虑 es clickhouse 这些了 | 
|  |      11rqxiao OP 有 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> | 
|      12zibber      2022-08-26 17:53:38 +08:00 clickhouse | 
|  |      13MoYi123      2022-08-26 17:55:57 +08:00 建议直接说服产品, 分页改成一页页翻, 用上一页的主键去查下一页, 然后行数大于 10000 行直接显示 10000+. 基本只能这么做. | 
|      14tairan2006      2022-08-26 17:58:57 +08:00 改成下拉分页,别算总数了。 | 
|  |      15dwlovelife      2022-08-26 18:16:05 +08:00 用 mysql  一句话 无解, 要么改需求, 要么上别的数据库 | 
|  |      17makelove      2022-08-26 19:28:24 +08:00 先想明白你要的是什么,而不是怎么实现 5 千万级保证实现精确,这 tm 什么需求,造火箭都不需要这么高精度 | 
|      18djoiwhud      2022-08-26 19:46:27 +08:00 via Android 条件未命中索引,或者是结果集超比例,触发了全表扫描。 优化办法,优化 sql ,优化索引。如果是结果集超大,导致索引查询转全表扫描,需要考虑需求调整。或者是技术方案调整。 做数据冗余,规避汇总语句,也是可以的。 | 
|      19djoiwhud      2022-08-26 19:48:44 +08:00 via Android 不带条件的 sql ,别说五千万,就是一个亿,count *也可以快速查询出来。 这个问题换 count 1 没任何影响。 | 
|  |      20honamx      2022-08-26 20:09:00 +08:00 建组合索引试试,is_deleted, data_type, fileType, fileSource ,auditStatus | 
|  |      21Red998      2022-08-26 20:26:45 +08:00 mysql 数据达到瓶颈了 、再怎么优化还是性能差的。考虑做数据切分 分表之类的。 | 
|  |      22chendl111      2022-08-26 20:43:21 +08:00 via Android 换 lykasm | 
|      23bthulu      2022-08-26 21:07:33 +08:00 触发器啊, 新增一条满足查询条件的数据就记录+1, 删除一条就记-1. 后面只查这个记录数就行了, 1 毫秒都用不到就能精确返回 | 
|  |      24justanetizen      2022-08-26 21:16:42 +08:00 加个表或者缓存里存储该表的总数据数 | 
|  |      25pengtdyd      2022-08-26 21:17:53 +08:00 这不是技术的问题,这是产品的问题。 | 
|  |      26justanetizen      2022-08-26 21:20:07 +08:00 还有一个办法,用 insert 、delete 触发器 | 
|  |      27yousabuk      2022-08-26 21:21:27 +08:00 via iPhone 换 myisam | 
|  |      28justanetizen      2022-08-26 21:31:10 +08:00 | 
|      29taogen      2022-08-26 21:35:05 +08:00 表结构、索引和 explain 贴一下啊 | 
|  |      30akira      2022-08-26 22:40:21 +08:00 产品问题,改成查最近一段时间的 数据,例如 30 天,7 天, 然后这样就可以走索引了。 | 
|  |      31hubahuba      2022-08-27 17:03:20 +08:00 这这这不分表 | 
|      32iseki      2022-08-27 21:51:12 +08:00 via Android 才 5000 万分啥表 | 
|  |      33KouShuiYu      2022-08-28 20:14:51 +08:00 检查下 where 条件是不是有类型转换之类的操作,之前有张表 conv_time :: date between :dateStart and :dateEnd 修改成了 conv_time between :dateStart and (date :dateEnd + interval '1 day' - interval '1 second') 查询时间直接从 3s 干到了 20ms | 
|      34CrazyMonkeyV      2022-08-29 16:54:09 +08:00 我们也遇到了这个问题,在特定需求下,近乎无解。 | 
|  |      36NoahVI      2022-09-09 15:24:48 +08:00 还是考虑用 es 吧 |