桌子
+-----------+-------------+------+-----+--------- ----------+----------------+ | 领域 | 类型 | 空 | 钥匙 | 默认 | 额外 | +-----------+-------------+------+-----+--------- ----------+----------------+ | 编号 | 整数(11) | 否 | 优先级 | 空 | 自动增量 | | 姓名 | varchar(32) | 否 | | 空 | | | 进程号 | varchar(32) | 否 | | 空 | | +-----------+-------------+------+-----+--------- ----------+----------------+
程序:测试
begin
set @i=0;
while @i<200 do
insert into test.table_test
(name, pid) values ('1', '1');
set @i=@i+1;
end while;
end
跑:
mysql> call test();
Query OK, 0 rows affected (17.24 sec)
但是当我用 jdbc 插入数据时,插入 10^5 行只需要大约 9 秒(如果我使用批量插入,插入 10^5 行只需要大约 2.4 秒)。
爪哇代码:
static String mySqlUrl="jdbc:mysql://127.0.0.1:3306/test?rewriteBatchedStatements=true";
static String sql = "insert into bael_test(name, pid) values(?, ?)";
public static void test_mysql_batch(int point){
Connection conn=getConn("mysql");
clear(conn);
try {
PreparedStatement prest = conn.prepareStatement(sql);
long a=System.currentTimeMillis();
for(int x = 1; x <= 100000; x++){
prest.setString(1, "name");
prest.setString(2, "pid");
prest.addBatch();
if(x%point==0){
prest.executeBatch();
conn.commit();
}
}
long b=System.currentTimeMillis();
print("MySql batch insert 10^5 rows",a,b,point);
} catch (Exception ex) {
ex.printStackTrace();
}finally{
close(conn);
}
}
那么为什么 MySQL 插入比 JDBC 慢呢?