天天看点

JDBC批量操作性能提升

当使用insert into....values()语句批量插入的时候,应该使用jdbc的preparedstatement的批量操作方法,而不是采用一条一条执行的方法。

例如(来源:http://superjavason.iteye.com/blog/255423):

JDBC批量操作性能提升

如上图,代码有3个关键的处理步骤:

1)关闭自动提交

2)addbatch

3)executebatch

使用这种方法,sqlite测试时的效果提升非常明显,从 10000/s提升到100000/s(数据仅做参考,不能作为决策依据)

需要注意的是:这种方式只适合相同结构的sql语句批量执行,对于不同结构的sql语句不能用这种方式,因为preparedstatement在初始化的时候要指定sql

使用上述参数后,mysql的性能也有一定的提升,但提升不明显。经过查找,确认和如下两个参数有关:

rewritebatchedstatements=true

mysql默认关闭了batch处理, 通过此参数进行打开, 这个参数可以重写向 数据库提交的sql语句

useserverprepstmts=false

如果不开启(useserverprepstmts=false), 使用com.mysql.jdbc.preparedstatement进行本地sql拼装, 最后送到db上就是已经替换了?后的最终sql

经过测试,打开这2个参数后,mysql的批处理性能从1000多提升到50000多

详细请参考:http://blog.csdn.net/whucyl/article/details/20838079