通过Java代码将大约500.000条记录从CSV文件插入MySQL数据库需要多长时间?数据库托管在本地主机上。
表结构:AI id, | varchar(8) | datetime | int | varchar(2)
。我的代码需要在 40 分钟内插入 70.000 条记录。有什么办法可以做得更快吗?
这是我的代码的主要部分:
CsvReader pro
ducts = new CsvReader(path);
products.readHeaders();
stmt = con.createStatement();
String updateString = "INSERT INTO table (T_V1, date, T_V2, T_V3) VALUES (?,?,?,?)";
PreparedStatement preparedStatement = con.prepareStatement(updateString);
while (products.readRecord()) {
v1= products.get("V1");
date = format.parse(products.get("Date") + " " + products.get("Hour"));
java.sql.Date dateDB = new java.sql.Date(data.getTime());
v2 = products.get("V2");
v3 = products.get("V3");
preparedStatement.setString(1, v1);
preparedStatement.setDate(2,dateDB);
preparedStatement.setInt(3, Integer.parseInt(v2));
preparedStatement.setString(4, v3);
preparedStatement.executeUpdate();
}
根据您的建议,我将语句的创建移出了循环。现在我每秒有 33 条记录,之前我有 29 rps。
我可能会选择使用LOAD DATA
来自 MySQL 的语句而不是使用 Java:
LOAD DATA LOCAL INFILE '/path/to/your/file.csv' INTO TABLE table;
假设您在将每一行插入 MySQL 之前对其进行处理,这将避免您当前的大量开销。
您可以执行LOAD DATA
使用原始 JDBC 来自 Java 的语句。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)