根据我上面的问题,我需要在我的数据库的一个表中插入超过 2000 万行。根据性能,我正在寻找一种方法来提高这个过程的效率。我的第一个想法是用 Java.Thread 实现这一点,但我不太确定这是否足够节省。有人对我有什么好的建议吗?
编辑:我已经使用preparedStatement.addBatch()
根据我上面的问题,我需要在我的数据库的一个表中插入超过 2000 万行。根据性能,我正在寻找一种方法来提高这个过程的效率。我的第一个想法是用 Java.Thread 实现这一点,但我不太确定这是否足够节省。有人对我有什么好的建议吗?
编辑:我已经使用preparedStatement.addBatch()
对我来说看起来很安全,前提是每个线程都使用不同的 Connection 对象,然后正确处理资源。
无论如何,请注意数据库本身对并发运行的请求有限制( MySQL 中的max_connections),因此它无助于创建比此数量更多的线程。此外,请考虑其他优化,例如批量插入。
从不同的线程访问数据库并没有错。正如 Eyal 所写,只要确保像 Connections 这样的东西只能用于单个线程并正确处理。
另一个问题是,这是否真的有助于你的表现。我会确保您在使用多个线程之前完成了其他所有操作。特别是使用批处理语句似乎是您尚未研究的第一个选项。
如果我理解正确,您需要一种将数千个查询写入数据库的方法。你知道你可以执行一批 MySQL 查询吗?在 Java的 Stackoverflow 上已经有一个关于此的问题 :Insert multiple rows into MySQL with PreparedStatement
您可以使用: PreparedStatement#addBatch() http://docs.oracle.com/javase/6/docs/api/java/sql/PreparedStatement.html#addBatch%28%29
和 PreparedStatement#executeBatch() http://docs.oracle.com/javase/6/docs/api/java/sql/Statement.html#executeBatch%28%29
在上面的链接中查看@BalusC 的答案以获取更多详细信息。