innodb count(*) 超过 10 亿条记录,怎么破?

2014-03-04 15:48:23 +08:00
 whuhacker
13亿条记录共 53G 数据,属于 log 性质的数据,有事务处理,写入频繁,读虽然不多,但需要可以分页查询。分页就需要 count(*),众所周知 innodb 的 count() 很慢,怎么办?

换 myisam 就不支持事务了,好纠结
9903 次点击
所在节点    MySQL
24 条回复
raincious
2014-03-05 00:07:44 +08:00
@whuhacker 这得看具体情况优化了。

另外分页不一定需要COUNT,可以只给出上一页下一页,用多取一条的方法判断下一页有没有内容就可以了。

下面就是LIMIT慢的问题了,呵呵呵……
nine
2014-03-05 12:06:34 +08:00
先加个二级联合索引试试
把主键 和需要order、group的字段加一个联合索引
这样count(*)的时候就走这个索引了

顺便问一句你现在count一次多少时间?
wwek
2014-03-05 20:16:30 +08:00
it系统的基本构架方案里面有一条。
那就是 “拆”。
如果你这个不能拆。 那就按照楼上的方法来搞吧。

我还是坚持拆出来。
haython
2014-03-06 12:51:02 +08:00
看看Tokudb这个引擎

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

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

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

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

© 2021 V2EX