批量插入指的是:
同一事务内,同一个 PreparedStatement,for 循环,反复赋值提交,最终提交一次事务
多行插入指的是:
拼接类似于下面这种语句 insert into table values(x,y,z),(x,y,z),(x,y,z);
如果需要插入大量数据,使用哪种方式更好呢?
数据库使用 Mysql
批量插入指的是:
同一事务内,同一个 PreparedStatement,for 循环,反复赋值提交,最终提交一次事务
多行插入指的是:
拼接类似于下面这种语句 insert into table values(x,y,z),(x,y,z),(x,y,z);
如果需要插入大量数据,使用哪种方式更好呢?
数据库使用 Mysql
|
yitingbaiJun 25, 2021
1
个人觉得多行插入速度更快些
|
|
wolfieJun 25, 2021
2
java.sql.Statement#executeBatch
|
|
redcoffeecatJun 25, 2021
3
差不多
|
|
kiracyanJun 25, 2021
4
写个代码插个一万行就知道了
|
|
cnoderJun 25, 2021
5
多行插入注意下数据上限~有的可能有参数数量上限或者考虑 binlog-row 一时间写入太多~。。但我还是喜欢多行插入
|
|
timethinkerJun 25, 2021
6
如果是 MySQL 的话,我以前测试过,在大批量数据插入情况下(数据迁移),关闭以下这些选项插入更快:
关闭自动提交模式 关闭索引 关闭外键检查 至于 INSERT 语句一次插入一条还是多条,区别在于网络 IO 耗时,在内部速度应该都是一样的,不过返回来想一下,这种合并插入语句更难以维护和编写,除非特殊情况否则不建议这么做。 详见: https://dev.mysql.com/doc/refman/5.7/en/optimizing-innodb-bulk-data-loading.html |
|
cnoderJun 25, 2021
7
看错了 打扰了,当我没说
|
|
mcoo1997Jun 25, 2021
8
批量插入 写起来爽就完事了
|
|
9
insert into table values(x,y,z),(x,y,z),(x,y,z); 这个是原子性的,看二进制日志就是开启了一个事务,你试试中间有一条插入失败,全部都会回滚
|
|
cheng6563Jun 25, 2021
10
多行插入快得多,但不要一次太多行。
在 Java 里,批量插入不会提升太多性能,除非你加上 rewriteBatchedStatements=true 参数,这样连接驱动会把你的批量插入转成多行插入。 |
|
xupefeiJun 25, 2021 via iPhone
11
这两个方案效率一样。
|
|
bthuluJun 25, 2021
12
效率一样的, 只不过批量插入兼容多种数据库写法, 但是如果是 java, 用的还是 mybatis, 绝大多数人用的就是多行插入, 因为在 xml 里来个 for 循环标签就搞定了, 而批量插入则复杂的多, 很多人根本不会.
|
|
ChoateYaoJun 25, 2021
13
|
|
CookieeeeeeJun 25, 2021
14
批量快,只需要用一个连接,尽管有连接池,我是这么理解的。
|
|
loveJun 25, 2021
15
以前看过一个评测,印象中多行比批量快得多,至少一倍那种
|
|
rekulasJun 25, 2021
16
理论上多行快-前提是不出错和导致阻塞、死锁的情况下
相对之下单条更安全点,如果是线上高负载的数据库,应该优先考虑单条 |
|
awingJun 26, 2021
17
取决于数据规模吧。批量放在一个事务里,当然好些。
但是还是要尽可能避免长事务。数据量过大最好也拆成多个事务 ( me 只会纸上谈兵 |
|
ch2Jun 26, 2021
18
第二种,你看过 mysql 导出的数据库的.sql 脚本就知道了
|
|
yrjSep 1, 2021 via iPad
19
个人不权威测试:第二种多行会快一丢丢,但第一种批量比较好写代码,所以性能要求不极致的我,选择第一种
|