首发:微信公众号「知数堂」
出处:https://mp.weixin.qq.com/s/-FDJ_-z6oJbRgRaCKXoyjg
关 于 叶 问
《叶问》是知数堂新设计的互动栏目,不定期给大家提供技术知识小贴士,形式不限,或提问、或讨论均可,并在当天发布答案,让大家轻轻松松利用碎片时间就可以学到最实用的知识点。
2020年6月12日,周五
《叶问》第30期,有什么方案可以优雅地实现MySQL大表count操作?
-
首先MySQL innodb引擎并不是特别适合做count操作(MyISAM虽然count代价很小,但是不推荐再使用了)
-
对于count操作,MySQL会优先选择非空的二级索引,原因是一般来说二级索引所占的空间更小,读取的成本会更低
-
MySQL8.0对于没有WHERE条件的count支持并行读,效率更高
-
可考虑Redis或ES等nosql或newsql实现计数的方案,例如:业务写入MySQL同时对Redis对应的key做incr或decr等操作
延伸阅读
– 为何COUNT很慢却不写SLOW LOG