【问题标题】:What's the quickest way with SQL to insert a bunch of rowsSQL插入一堆行的最快方法是什么
【发布时间】:2011-08-17 14:29:40
【问题描述】:

我在内存中有一个数字数组,我需要将它们放在一个临时表中,以便我可以加入其他表。该列表可以是 5 个,也可以是 250000 个。 我可以一次插入一个,但我想知道是否有任何 sql 技巧,我可以一次插入 100 个插入到 select.... 那种我没有想到的事情。

批量上传器(在 sybase 中)不是一个选项,因为它没有 java 实现,而且对 bcp 的 shell 也不是一个选项。

【问题讨论】:

    标签: sql insert sybase bulkinsert


    【解决方案1】:

    尝试 JDBC 批量插入。我从未使用过 Sybase,但这也适用于 MySql、Postgres 和 Oracle。

    Statement stmt = con.createStatement();
    
    stmt.addBatch("INSERT INTO employees VALUES (1000, 'Joe Jones')");
    stmt.addBatch("INSERT INTO departments VALUES (260, 'Shoe')");
    stmt.addBatch("INSERT INTO emp_dept VALUES (1000, 260)");
    
    // submit a batch of update commands for execution
    int[] updateCounts = stmt.executeBatch();
    

    http://download.oracle.com/javase/1.3/docs/guide/jdbc/spec2/jdbc2.1.frame6.html

    【讨论】:

    • 这是否仍可扩展到单批 250,000 次插入?
    • 可能。这取决于一个语句的大小。你必须自己尝试一下。当您增加批量大小时,您最终会遇到 OutOfMemory。在具有专用于我的应用程序 (Xmx) 的 1G 内存的普通 PC 上,我通常使用 50k 批量大小。我发现 50k 和 100k 之间没有显着差异:对于 1M 记录,无论您在应用程序和数据库之间有 10 次还是 20 次往返,都几乎相同。
    • 多于 1 的批次将是一个巨大的改进。谢谢。
    • 基本上是我试图避免的服务器来回来回。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-28
    • 1970-01-01
    相关资源
    最近更新 更多