单个插入语句有时会超过2秒。插入可能是并发的,因为它取决于我们的站点流量,每分钟可能导致200次插入。
该表有超过150M行,4个索引,可以使用简单的select语句进行访问以进行报告。
如果需要所有索引,如何加速插入?
答案 0 :(得分:1)
您还没有提供很多细节,但似乎您需要分区。
数据库索引中的插入操作通常具有O(logN)时间复杂度,其中N是表中的行数。如果你的桌子真的很大,那么logN可能会变得太多。
因此,为了解决该可伸缩性问题,您可以使用索引分区以较小的内部部分透明地分割表索引,并在不更改应用程序或SQL脚本的情况下减少N.
https://dev.mysql.com/doc/refman/5.7/en/partitioning-overview.html
[编辑]
考虑最初在评论中添加的信息,现在在问题本身中更新。
有一些不相互排斥的改进:
检查EXPLAIN的输出以查找该SELECT并删除未使用的索引,否则将它们组合在一个索引中。
批量制作插页
分区仍然是一个选项。
或者,更改您的方法:将数据保存到像redis这样的nosql数据库,并异步填充mysql表以进行报告。