多次插入加速

时间:2011-05-03 15:48:39

标签: java mysql

我正在解析大型日志文件(5 + GB)并提取临时放置的分析行(呼叫名称和执行时间)。我想将这些行插入MySql数据库。

我的问题是:每次解析时我是否应该执行insert语句,或者是否有一些最佳实践可以加速一切?

6 个答案:

答案 0 :(得分:7)

如果有任何方法可以进行批量插入,那将有很大帮助(或者至少将数据分批发送到数据库,而不是每次都进行单独调用)。

修改

LOAD DATA INFILE听起来更快; o)

https://web.archive.org/web/20150413042140/http://jeffrick.com/2010/03/23/bulk-insert-into-a-mysql-database

答案 1 :(得分:3)

有更好的选择。 见http://dev.mysql.com/doc/refman/5.0/en/insert-speed.html

在您的情况下,我认为将相关记录写入文件然后使用LOAD DATA INFILE是最好的方法。

答案 2 :(得分:1)

对于小型更新,事务数量对性能至关重要。因此,如果您可以在同一个事务中执行多个插入,那么它将会更快。我会先为每笔交易尝试100次插入。

答案 3 :(得分:0)

如果您不想按照Galz链接中的建议(这是优秀的BTW),那么尝试打开连接并准备一次语句,然后循环执行插入的日志文件(使用premared语句) ,然后最后在结束时关闭语句和连接。这不是最快的插入方式,但它是坚持“正常”JDBC方法的最快方式。

答案 4 :(得分:0)

答案 5 :(得分:0)

除了插入速度之外,您可能遇到的另一个问题是内存。无论使用何种方法,您都需要考虑内存使用情况,因为记录是从文件加载的。除非您对处理速度有严格的要求,否则使用具有可预测内存占用的方法可能会更好。