在java中向数据库插入大量数据

在java中向数据库插入大量数据,java,mysql,jdbc,Java,Mysql,Jdbc,这可能会有很多问题,但是, 所以我试图用java将400万条记录插入数据库, 我做了很多谷歌搜索,并尝试了access和MySQL。两者几乎相同, 对于MySQL,我尝试了statement.addBatch()但仍然需要很长时间。 问题是,我能得到的最佳时间是什么?最好的方法是什么 counter++; String sqlQuery = "INSERT INTO employees VALUES("some query")"; sqlStat

这可能会有很多问题,但是, 所以我试图用java将400万条记录插入数据库, 我做了很多谷歌搜索,并尝试了access和MySQL。两者几乎相同, 对于MySQL,我尝试了
statement.addBatch()但仍然需要很长时间。
问题是,我能得到的最佳时间是什么?最好的方法是什么

        counter++;
        String sqlQuery = "INSERT INTO employees VALUES("some query")";

        sqlState.addBatch(sqlQuery);

        if (counter == 1000) {

            sqlState.executeBatch();

            counter = 0;
        }

我使用批处理对吗?

重用单个PreparedStatements,为每个记录设置参数,然后将其添加到批处理中

PreparedStatement ps = conn.prepareStatement("Insert into employees (f1, f2, f3) VALUES (?, ?, ?)");
while (hasMoreRecords) {
  ps.setString(1, "v1");
  ps.setString(2, "v2");
  ....
  ps.addBatch();
  if (++i % 1000 == 0) {
    ps.executeBatch();
  }
}
ps.executeBatch();
这不会有太大的区别,但是最佳的


您的
INSERT
是否使用子查询?可能子查询速度慢。

重用单个PreparedStatements,为每个记录设置参数,然后将其添加到批处理中

PreparedStatement ps = conn.prepareStatement("Insert into employees (f1, f2, f3) VALUES (?, ?, ?)");
while (hasMoreRecords) {
  ps.setString(1, "v1");
  ps.setString(2, "v2");
  ....
  ps.addBatch();
  if (++i % 1000 == 0) {
    ps.executeBatch();
  }
}
ps.executeBatch();
这不会有太大的区别,但是最佳的


您的
INSERT
是否使用子查询?子查询可能很慢。

如果您知道数据是一致的,您可能可以在插入之前删除所有约束,并在插入后添加约束。这将极大地提高性能。记录当前是如何存储的?它们是否在SQL文件中?如果是这样,您应该能够直接将其作为脚本运行,而无需使用Java。只是一个想法。我建议你检查这些:,这听起来像是一个初始数据加载。您可能希望直接插入,绕过Java。对于MySQL,这将使用。正如@ReutSharabani所说,在加载过程中删除所有索引和外键将非常有帮助。重建一个包含400万条记录的索引要比一次插入一条记录快得多。@ReutSharabani我没有听你的,我对这一切都不熟悉如果你知道数据是一致的,你可能可以在插入之前删除所有约束,然后在插入后添加它们。这将极大地提高性能。记录当前是如何存储的?它们是否在SQL文件中?如果是这样,您应该能够直接将其作为脚本运行,而无需使用Java。只是一个想法。我建议你检查这些:,这听起来像是一个初始数据加载。您可能希望直接插入,绕过Java。对于MySQL,这将使用。正如@ReutSharabani所说,在加载过程中删除所有索引和外键将非常有帮助。重建一个包含400万条记录的索引要比一次插入一条记录快得多。@ReutSharabani我没有听你的,我对这一切都是新手,我会尝试一下。不,没有子queryi会尝试这个。不,没有子查询