Mysql SQL Server上的慢速insert语句
单个insert语句有时需要2秒以上的时间。这些插入可能是并发的,因为这取决于我们的站点流量,这可能导致每分钟200次插入 该表有超过1.5亿行、4个索引,并且出于报告目的,可以使用简单的select语句进行访问 显示来自ouptut的索引Mysql SQL Server上的慢速insert语句,mysql,sql,database,database-administration,Mysql,Sql,Database,Database Administration,单个insert语句有时需要2秒以上的时间。这些插入可能是并发的,因为这取决于我们的站点流量,这可能导致每分钟200次插入 该表有超过1.5亿行、4个索引,并且出于报告目的,可以使用简单的select语句进行访问 显示来自ouptut的索引 考虑到所有索引都是必需的,如何加快插入速度?您没有提供很多详细信息,但似乎需要分区 数据库索引中的插入操作通常具有O(logN)时间复杂度,其中N是表中的行数。如果你的桌子真的很大,连logN都可能变得太多 因此,为了解决这个可伸缩性问题,您可以使用索引分
考虑到所有索引都是必需的,如何加快插入速度?您没有提供很多详细信息,但似乎需要分区 数据库索引中的插入操作通常具有O(logN)时间复杂度,其中N是表中的行数。如果你的桌子真的很大,连logN都可能变得太多 因此,为了解决这个可伸缩性问题,您可以使用索引分区将表索引透明地分割成更小的内部部分,并在不更改应用程序或SQL脚本的情况下减少这N个索引 [编辑] 考虑最初在评论中添加的信息,现在在问题本身中更新
- 每分钟200次潜在并发插入
- 4个索引
- 1为报告目的选择
- 检查EXPLAIN的输出,以确定未使用的SELECT和remove索引,或者将它们合并到一个索引中
- 成批制作插页
- 分区仍然是一种选择
或者,改变方法:将数据保存到nosql数据库(如redis)中,并异步填充mysql表以进行报告。索引会增加插入时间。(还有更多的工作要做…)有什么触发因素吗?@jarlh:是的,这就是问题所在。这就是为什么需要一个解决方案:)不涉及触发器。你不可能两种方式都有,要么没有用于快速插入的索引,要么为更好的选择而索引-利用你拥有的索引数量,是否有包含一半表字段的大索引,是否有未使用的索引等…如果你在原始问题中添加了详细信息,与其在评论中添加细节,不如更容易阅读。谢谢@olivecoder的建议。我正在寻找您共享的分区。我会在这里告诉你我的发现。我在这里分享了一些细节