【问题标题】:What does rewritebatchedStatements do internally in MySQL?rewritebatchedStatements 在 MySQL 内部做了什么?
【发布时间】:2014-03-12 19:26:02
【问题描述】:

做一些代码基准测试,我试图提高批量写入的性能。我目前正在使用 Spring 的 jdbcTemplate 插入带有updateBatch 的批处理。

我每批插入 50000 条记录。使用rewritebatchedStatements=true,插入所有这些记录大约需要 60 秒。

但是,如果我通过主键对记录进行预排序,我可以将其缩短到 2 秒。

在我的应用层对 50,000 条记录进行排序非常快,那么当数据未排序时,MySQL 中插入缓慢的原因是什么?

【问题讨论】:

  • 听起来 MySQL 正在破坏索引 - 我不确定rewritebatchedStatements 对这个过程有什么影响(如果有的话)(例如,它是否与首先排序/不排序相关? )
  • 也许它只是将 N 个插入合并为一个 stackoverflow.com/a/2297647/2864740 .. that 如何影响 MySQL?我想不多..
  • 您可以发布一些显示此行为的示例代码和架构吗?

标签: mysql spring jdbc


【解决方案1】:

一个原因可能是mysql b+tree索引,如果插入的记录有主键,mysql会在主键上创建索引。然后,如果重新插入主键低于插入键的记录,则创建 B+树索引将花费更多时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-22
    • 2021-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-03
    • 2017-03-02
    • 2018-06-14
    相关资源
    最近更新 更多