JDBC批量Insert深度优化(没事务)(转)
    最近在做一个数据同步分发工具,高并发,高效率,异步非实时是主要特点。
为此,选择的方案是JDBC、只有两种操作,插入和更新。
?
对于更新,只能逐条分批就可以了,优化空间不大。
对于插入,则可以做批量的优化,优化的策略只能是具体问题具体分析,以测试结论为主要依据了。
?
环境:
MySQL 5.1
RedHat Linux AS 5
JavaSE 1.5
DbConnectionBroker 微型数据库连接池
?
测试的方案:
执行10万次Insert语句,使用不同方式。
?
A组:静态SQL,自动提交,没事务控制(MyISAM引擎)
1、逐条执行10万次
2、分批执行将10万分成m批,每批n条,分多种分批方案来执行。
?
B组:预编译模式SQL,自动提交,没事务控制(MyISAM引擎)
1、逐条执行10万次
2、分批执行将10万分成m批,每批n条,分多种分批方案来执行。
-------------------------------------------------------
C组:静态SQL,不自动提交,有事务控制(InnoDB引擎)
1、逐条执行10万次
2、分批执行将10万分成m批,每批n条,分多种分批方案来执行。
?
D组:预编译模式SQL,不自动提交,有事务控制(InnoDB引擎)
1、逐条执行10万次
2、分批执行将10万分成m批,每批n条,分多种分批方案来执行。
?
本次主要测试A、B组,并得出测试结果。
?
SQL代码
DROP TABLE IF EXISTS tuser; 
CREATE TABLE tuser ( 
????id bigint(20) NOT NULL AUTO_INCREMENT, 
????name varchar(12) DEFAULT NULL, 
????remark varchar(24) DEFAULT NULL, 
????createtime datetime DEFAULT NULL, 
????updatetime datetime DEFAULT NULL, 
????PRIMARY KEY (id) 
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
 
?
?
下面是A、B组的测试代码:
package testbatch; 
import java.io.IOException; 
import java.sql.*; 
/** 
* JDBC批量Insert优化(上) 
* 
* @author leizhimin 2009-7-29 10:03:10 
*/ 
public class TestBatch { 
????????public static DbConnectionBroker myBroker = null; 
????????static { 
????????????????try { 
????????????????????????myBroker = new DbConnectionBroker("com.mysql.jdbc.Driver", 
????????????????????????????????????????"jdbc:mysql://192.168.104.163:3306/testdb", 
????????????????????????????????????????"vcom", "vcom", 2, 4, 
????????????????????????????????????????"c:\\testdb.log", 0.01); 
????????????????} 
  
                        
                     
                    
                    
                        免责声明: 本文仅代表作者个人观点,与爱易网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。