SQL 服务器上的缓慢插入语句

Slow insert statements on SQL Server

单个插入语句有时会超过 2 秒。插入可能是并发的,因为它取决于我们的网站流量,这可能导致每分钟 200 次插入。

table 有超过 1.5 亿行,4 个索引,使用简单的 select 语句访问以进行报告。

显示输出的索引

考虑到所有索引都是必需的,如何加快插入速度?

您没有提供很多细节,但您似乎需要分区。

数据库索引中的插入操作通常具有 O(logN) 时间复杂度,其中 N 是 table 中的行数。如果你的 table 真的很大,甚至 logN 可能会变得太多。

因此,要解决可伸缩性问题,您可以利用索引分区透明地将 table 索引拆分为更小的内部片段,并在不更改应用程序或 SQL 脚本的情况下减少 N。

https://dev.mysql.com/doc/refman/5.7/en/partitioning-overview.html

[编辑]

考虑到最初在评论中添加的信息,现在在问题本身中进行了更新。

  • 每分钟 200 次潜在并发插入
  • 4 个索引
  • 1 select 用于报告目的

有一些不相互排斥的改进:

或者,改变您的方法:将数据保存到像 redis 这样的 nosql 数据库,并异步填充 mysql table 以用于报告目的。