テーブル
+ ----------- + -------------- + ------ + ----- + --------- ---------- + ---------------- + | フィールド| タイプ| ヌル| キー| デフォルト| エクストラ| + ----------- + -------------- + ------ + ----- + --------- ---------- + ---------------- + | id | int(11)| いいえ| PRI | NULL | auto_increment | | 名前| varchar(32)| いいえ| | NULL | | | pid | varchar(32)| いいえ| | NULL | | + ----------- + -------------- + ------ + ----- + --------- ---------- + ---------------- +
手順:テスト
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秒かかります)。
Javaコード:
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よりも遅いのでしょうか。