SELECT COUNT(*)超级慢,讨论一下解决方案

2018-05-14 13:35:02 +08:00
 Aluhao

使用场景: 1、回复表 1 亿多数据,每天增长 1 万+; 2、发回复的时候得统计回复用户回复数量;

使用的语句:SELECT COUNT(*) FROM answer WHERE uid='10' 查询结果:6963911 使用时间:101.618 秒 其中 uid 已经索引,也用过其它 COUNT(其它列字段) 查询一样很慢; 如果用 aid 已经索引,aid='10' 查出结果数量少,查询很快;

还能通过优化 SQL 语句来优化吗,如果不行,只能通过 insert +1 及 delete -1 来解决了。

19742 次点击
所在节点    MySQL
67 条回复
sleshep
2018-05-15 16:49:51 +08:00
触发器解决问题
randyzhao
2018-05-15 17:18:41 +08:00
10 号用户评论量有近 700W。。。
dobelee
2018-05-15 19:53:24 +08:00
InnoDB 的 count 是无解的,如果对精准度没有要求的话可定时统计存储,否则需要维护一个计数器。
lgh
2018-05-15 22:44:22 +08:00
@Aluhao 你没理解 @defclass 的意思,应该写成 WHERE uid=10,否则 uid 的索引是不会起作用的,很多人叫你 explain 一下,你也没做吗?如果做了也能看出没走索引的。
fox0001
2018-05-16 06:39:44 +08:00
我很懒,超过 99 条后,就显示 99+
Aluhao
2018-05-16 09:28:13 +08:00
@lgh 这个试过了,加了和没加效果一样呢;
sagaxu
2018-05-16 09:47:55 +08:00
@lgh 用不用索引,看用索引这个字段过滤后,剩下的条数占的比例,如果不够稀疏,比如说大于 10%,索引的质量就很低,走不走索引就不一定了。

最常见的毫无意义的索引就是性别

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

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

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

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

© 2021 V2EX