gpt4 book ai didi

mysql - 为什么 MySQL 插入比 JDBC 慢?

转载 作者:可可西里 更新时间:2023-11-01 06:49:06 25 4
gpt4 key购买 nike

表格

+-----------+--------------+------+-----+-------------------+----------------+| Field     | Type         | Null | Key | Default           | Extra          |+-----------+--------------+------+-----+-------------------+----------------+| id        | int(11)      | NO   | PRI | NULL              | auto_increment || name      | varchar(32)  | NO   |     | NULL              |                || pid       | varchar(32)  | NO   |     | NULL              |                |+-----------+--------------+------+-----+-------------------+----------------+

procedure:test

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 慢?

最佳答案

您的 Java 代码使用准备好的语句,而您的 MySQL 代码没有。

换句话说,您的过程必须在循环的每一步检查查询的语法是否正确,以及在磁盘上定位表,而准备好的语句仅执行此操作,并且只会将值插入到没有进一步处理的正确位置。

如果你想比较,你可以使用PREPARE -> http://dev.mysql.com/doc/refman/5.0/en/sql-syntax-prepared-statements.html

只是凭内存写的,所以它可能是错误的:

PREPARE stmt1 FROM 'INSERT INTO test.table_test (name,pid) values(?,?)';
while @i<200 do
EXECUTE stmt1 USING @i, @i;;
set @i=@i+1;
end while;
DEALLOCATE PREPARE stmt1;

关于mysql - 为什么 MySQL 插入比 JDBC 慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11474235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com