首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >高效的多SQL插入

高效的多SQL插入
EN

Stack Overflow用户
提问于 2010-08-09 02:13:42
回答 3查看 1.1K关注 0票数 5

将1000行插入到一个表(jdbc/连接器-mysql数据库)中的最佳/最省时的方法是什么?(它是一个缓冲区,每次满了都需要转储到数据库中)

1-一条自动生成/合并的SQL语句?

2- for (int i = 0; i<1000; i++) { con.prepareStatement(s.get(i)); } con.commit();

3-存储过程?

4-通过文件进行批量数据插入?

5- (您的解决方案)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-08-09 02:24:47

The LOAD DATA INFILE statement可能是您获得性能的最佳选择。(上面选项列表中的#4)尽管它可能需要更多的代码来完成任务,因为您需要创建中间文件,将其获取到服务器,然后调用LOAD DATA将其加载到数据库中。

MySql帮助页面引用:

LOAD DATA INFILE语句以极高的速度将文本文件中的行读入表中。

票数 2
EN

Stack Overflow用户

发布于 2010-08-09 02:22:06

您可以使用JDBC批插入。

代码语言:javascript
复制
PreparedStatement ps = cn.prepareStatement("INSERT INTO....");

for (int i = 0; i < 1000; i++) {
    ps.setString(1, "value-" + i); // Set values
    ps.addBatch();                 // Add this to the batch
    ps.clearParameters();          // Reset the parameters
}

ps.executeBatch();

然而,mysql本身并不支持批插入功能,因此为了获得合理的性能,您需要将rewriteBatchedStatements=true添加到mysql jdbc配置中。

如果您想创建一个大的MySQL字符串,还可以使用特定于SQL的批插入语法。我会尝试这两种方法,并测试性能。

代码语言:javascript
复制
INSERT INTO x (a,b)
     VALUES ('1', 'one'),
            ('2', 'two'),
            ('3', 'three');

对于这两种方法都要小心,因为您可能会超过单个请求的最大数据包大小。您可能需要设置与缓冲区中的条目数量不同的批处理大小。例如,您可能需要将1000个条目分成10个批次,每批100个。

票数 0
EN

Stack Overflow用户

发布于 2010-08-09 03:19:00

请注意,JDBC会在每条语句之后自动提交,除非您显式地告诉它不要这样做。这样做,并在运行提交之前运行X插入,应该会大大提高您的性能。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3435467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档