2014-02-13 40 views
1

做了一些代碼基準測試,我試圖提高批量寫入的性能。我目前使用Spring的jdbcTemplate插入批次updateBatchrewritebatchedStatements在MySQL內部做什麼?

我每批插入50000條記錄。使用rewritebatchedStatements=true時,大約需要60秒來插入所有這些記錄。

但是,如果我通過主鍵對記錄進行預先排序,我可以將其降低到2秒。

在我的應用程序層對50,000條記錄進行排序非常快,那麼當數據未被排序時,在MySQL中插入緩慢的原因是什麼?

+0

這聽起來像MySQL是垃圾索引 - 我不知道什麼樣的影響,如果有的話,'rewritebatchedStatements'在過程中(例如,它首先與排序/不排序相關嗎?) – user2864740

+0

也許這只是簡單的結合N插入到一個http://stackoverflow.com/a/2297647/2864740 .. * * *如何影響MySQL?我想沒有太多.. – user2864740

+0

任何方式,你可以發佈一些示例代碼和架構,顯示此行爲? – Sudarshan

回答

-1

一個原因可能是mysql b + tree索引,如果插入的記錄有主鍵,mysql會在主鍵上創建索引。然後,如果重新插入主鍵低於插入鍵的記錄,創建B +樹索引會花費更多時間。