当前位置: 首页 > 知识库问答 >
问题:

批量插入大量数据到数据库

周阳波
2023-03-14

我创建了一个向MySql数据库插入数百万个值的程序。我读到过有关批插入的文章,它将优化我的程序并使其更快,但当我尝试这样做时,它以同样的方式工作。我没有将每个值插入数据库,而是每次将500个值保存在一个列表中,然后将它们插入一个大循环中,如下所示:

for(int i=0;i<500;i++)
{
   insertData(list.get(i));
}

然后我删除列表中的所有值,并再次开始收集500个值。它不应该工作得更好吗?
我的插入代码是:

public void insertToNameTable(String id,String name) throws SQLException
       {
           PreparedStatement ps=null;

            ps= conn.prepareStatement("INSERT INTO NameTable values(?,?,?)",user.getId(),user.getName());


            ps.setString(1,id);
            ps.setString(2,name);
            ps.setBoolean(3,false);
            ps.executeUpdate();

       }

我有一些问题:
1。为什么当我批量插入时它不能更快地工作
2。为了加快速度,我每次应该输入多少值?(500100010000)一起输入的值越多越好
3。我向数据库中插入值的方式是最好的方式吗

共有2个答案

蒲魁
2023-03-14

问题1

用户尼尔·科菲不久前说:

认为事先准备好的声明主要是关于html" target="_blank">性能的,这是一种误解,尽管这是一种很常见的误解。

另一张海报提到,他注意到Oracle和SQL Server的速度提高了约20%。我注意到MySQL也有类似的数据。事实证明,解析查询并不是所涉及工作的重要部分。在一个非常繁忙的数据库系统上,还不清楚查询解析是否会影响总体吞吐量:总体而言,它可能只会占用CPU时间,否则当数据从磁盘返回时,CPU时间将处于空闲状态。

因此,作为使用预处理语句的一个原因,针对SQL注入攻击的保护远远超过了性能改进。如果你不担心SQL注入攻击,你可能应该。。。

以下是原始帖子:
准备好的声明和表现
在我看来,所有答案都值得一读。我认为你期望PreparedStatement成为某种魔术师,可以显著提高插入速度,这就是为什么你对自己的进步感到失望<问题3:
使用PreparedStatement的正确方法是准备一条语句,然后在循环中设置值和更新数据库。下面是一个很好的例子:多次重用PreparedStatement

宰鸿博
2023-03-14

这是批量插入的有效方法。

Connection connection = new getConnection();
Statement statement = connection.createStatement();
 
for (String query : queries) {
    statement.addBatch(query);
}
statement.executeBatch();
statement.close();
connection.close();
 类似资料:
  • 问题内容: 我读到这里:使用Python将CSV文件导入sqlite3数据库表 似乎每个人都建议使用逐行读取,而不是使用SQLite的bulk .import。但是,如果您有数百万行的数据,这将使插入速度非常慢。还有其他方法可以避免这种情况吗? 更新:我尝试下面的代码逐行插入,但是速度不如我预期的那样。反正有改进的地方吗 问题答案: 使用生成器表达式将您的数据即时划分为多个块,在事务内进行插入。这

  • 本文向大家介绍MySQL批量插入数据脚本,包括了MySQL批量插入数据脚本的使用技巧和注意事项,需要的朋友参考一下 MySQL批量插入数据脚本 新建表格就可以了 插入十万的数据为./jiaoben.sh 100000

  • 问题内容: 在我的代码中,用户可以上传一个excel文档,希望其中包含电话联系人列表。作为开发人员,我应阅读excel文件,将其转换为dataTable并将其插入数据库。问题是某些客户拥有大量的联系人,例如说5000个和更多的联系人,而当我尝试将这种数据量插入数据库时​​,它崩溃了,并给了我一个超时异常。避免这种异常的最佳方法是什么?它们的任何代码都可以减少insert语句的时间,从而使用户不必等

  • 本文向大家介绍mysql批量删除大量数据,包括了mysql批量删除大量数据的使用技巧和注意事项,需要的朋友参考一下 mysql批量删除大量数据 假设有一个表(syslogs)有1000万条记录,需要在业务不停止的情况下删除其中statusid=1的所有记录,差不多有600万条, 直接执行 DELETE FROM syslogs WHERE statusid=1 会发现删除失败,因为lock wai

  • 问题内容: 哪种nosql系统更适合开箱即用地处理大量插入?最好在1台物理机上运行(允许许多实例)。 有没有人做过基准测试?(谷歌搜索没有帮助) 注意 :我了解选择noSQL数据库取决于需要存储的数据类型(文档:MongoDB,图:Neo4j等)。 问题答案: Apache Cassandra 的独特持久性模型使其在写操作方面表现出色。有人声称它的写入速度比读取速度快20倍,但我认为它确实取决于您

  • 本文向大家介绍Node.js下向MySQL数据库插入批量数据的方法,包括了Node.js下向MySQL数据库插入批量数据的方法的使用技巧和注意事项,需要的朋友参考一下 项目(nodejs)中需要一次性插入多笔数据到数据库,数据库是mysql的,由于循环插入的性能太差,就像使用批量插入的方法提高数据的插入性能。 批量插入的数据库的表结构如下: 1.数据库连接 将插入数据转换成嵌套数组 例如要插入的两