用jdbc进行批处理的时候发现,insert和delete的速度很快,update的速度却很慢,求解!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用jdbc进行批处理的时候发现,insert和delete的速度很快,update的速度却很慢,求解!相关的知识,希望对你有一定的参考价值。

insert和delete 1000数据大用了200ms,update的时候却要用十多秒。

参考技术A 是的 就是那样 人有高低 马有胖瘦 房有大小 车有快慢 明白了宝贝 参考技术B update的原理就是先delete,在insert.

如何做批处理 jdbc/insert!和 jdbc/更新!在 Clojure 中使用 postgresql?

【中文标题】如何做批处理 jdbc/insert!和 jdbc/更新!在 Clojure 中使用 postgresql?【英文标题】:How to do batch jdbc/insert! and jdbc/update! using postgresql in Clojure? 【发布时间】:2017-06-09 10:52:09 【问题描述】:

我试图在 Clojure 中进行批量插入和更新,但遇到了一些问题。

我使用的库是:clojure.java.jdbcpostgresql

互联网上有一些例子,但我无法让它工作,我最终得到了这样的例外:

CompilerException java.sql.BatchUpdateException: Batch entry 0 INSERT INTO person (data, age) VALUES ('ertu', '24') 被中止。称呼 getNextException 来查看原因。

CompilerException clojure.lang.ArityException:参数数量错误 (6) 传递给:jdbc/db-do-prepared

我正在尝试传递地图或矢量,但到目前为止它不起作用。

您能否提供一些clojure.java.jdbc/insert! and clojure.java.jdbc/update! 工作的具体示例

也找到了这个question,但不明白(first stmts) and (rest stmts)是什么。

【问题讨论】:

你能分享你试过的代码吗?它可能有助于诊断出了什么问题。 请务必查看 Clojure Cookbook:github.com/clojure-cookbook/clojure-cookbook/tree/master/… 【参考方案1】:
(require '[clojure.java.jdbc :as jdbc]
         '[java-jdbc.ddl :as ddl])

(jdbc/db-do-commands db-spec
  (ddl/create-table :fruit
    [:name "varchar(16)" "PRIMARY KEY"]
    [:appearance "varchar(32)"]
    [:cost :int "NOT NULL"]
    [:unit "varchar(16)"]
    [:grade :real]))
;; -> (0)


(jdbc/insert! db-spec :fruit
  nil ; column names omitted
  ["Red Delicious" "dark red" 20 "bushel" 8.2]
  ["Plantain" "mild spotting" 48 "stalk" 7.4]
  ["Kiwifruit" "fresh"  35 "crate" 9.1]
  ["Plum" "ripe" 12 "carton" 8.4])

【讨论】:

插入的最大参数数为 5!函数你甚至执行了代码吗? 我认为我们使用不同的版本...例如github.com/clojure/java.jdbc/blob/… 会看更新的版本

以上是关于用jdbc进行批处理的时候发现,insert和delete的速度很快,update的速度却很慢,求解!的主要内容,如果未能解决你的问题,请参考以下文章

使用 JDBC 进行批量插入的有效方法

storm-jdbc的使用

JDBC PreparedStatement Batch continue insert on error

使用JDBC进行批处理

使用 Postgresql JDBC 时,将导致插入 0 行的 INSERT 语句

mybatis insert的时候中获取自动增长列的 时候报的错