zoukankan      html  css  js  c++  java
  • JDBC批量操作性能提升

    JDBC

    当使用INSERT INTO....VALUES()语句批量插入的时候,应该使用JDBC的PreparedStatement的批量操作方法,而不是採用一条一条运行的方法。

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

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

    1)关闭自己主动提交

    2)addBatch

    3)executeBatch

    使用这样的方法,SQLite測试时的效果提升很明显,从 10000/s提升到100000/s(数据仅做參考,不能作为决策根据)

    须要注意的是:这样的方式仅仅适合同样结构的SQL语句批量运行。对于不同结构的SQL语句不能用这样的方式,由于PreparedStatement在初始化的时候要指定sql

     

    MySQL

    使用上述參数后,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

  • 相关阅读:
    [HNOI 2003] 消防局的设立
    Codeforces 341
    CF 专栏
    TC SRM 570
    TC SRM 588
    TC SRM 589
    TC专栏
    BZOJ 第二十一页 除草
    BZOJ 第二十二页 除草
    BZOJ 第二十三页 除草
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/6803073.html
Copyright © 2011-2022 走看看