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

2022-08-26 17:37:25 +08:00
 rqxiao
单表 5 千万 现在 count(*) 要 17s 左右
4477 次点击
所在节点    MySQL
36 条回复
Red998
2022-08-26 20:26:45 +08:00
mysql 数据达到瓶颈了 、再怎么优化还是性能差的。考虑做数据切分 分表之类的。
chendl111
2022-08-26 20:43:21 +08:00
换 lykasm
bthulu
2022-08-26 21:07:33 +08:00
触发器啊, 新增一条满足查询条件的数据就记录+1, 删除一条就记-1. 后面只查这个记录数就行了, 1 毫秒都用不到就能精确返回
justanetizen
2022-08-26 21:16:42 +08:00
加个表或者缓存里存储该表的总数据数
pengtdyd
2022-08-26 21:17:53 +08:00
这不是技术的问题,这是产品的问题。
justanetizen
2022-08-26 21:20:07 +08:00
还有一个办法,用 insert 、delete 触发器
yousabuk
2022-08-26 21:21:27 +08:00
换 myisam
justanetizen
2022-08-26 21:31:10 +08:00
taogen
2022-08-26 21:35:05 +08:00
表结构、索引和 explain 贴一下啊
akira
2022-08-26 22:40:21 +08:00
产品问题,改成查最近一段时间的 数据,例如 30 天,7 天, 然后这样就可以走索引了。
hubahuba
2022-08-27 17:03:20 +08:00
这这这不分表
iseki
2022-08-27 21:51:12 +08:00
才 5000 万分啥表
KouShuiYu
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
CrazyMonkeyV
2022-08-29 16:54:09 +08:00
我们也遇到了这个问题,在特定需求下,近乎无解。
NoahVI
2022-09-09 15:21:02 +08:00
@qq8331199 那还是用 binlog 好点。
NoahVI
2022-09-09 15:24:48 +08:00
还是考虑用 es 吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/875652

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX