- SpringBoot jpa默认批量写入性能很差分析
很多人认为是一条sql一条sql执行的问题,故而改为了insert into table values(),() 一条sql执行多条数据插入,当然这样没有问题,也是常用的解决办法;但本质上是事务控制的问题,默认save,或者saveAll(本质也是save),一个save就是一条sql 的insert,提交一个事务进而导致写入性能低。
- 思路
控制事务提交次数,在一个事务内提交一个批次的sql,虽然也是多个insert 但是效率依然非常高;
比如:insert into table() values(),() 拼接200多个提交一次实现批量跟
START TRANSACTION;
INSERT INTO your_table (column1, column2) VALUES ('value1', 'value2');
UPDATE your_table SET column1 = 'new_value' WHERE column2 = 'value2';
COMMIT;
200条效率是一样的,没有明显差异。
但是手动控制事务可以让一个事务提交10000条,而values拼接则不能拼接太多,所以从事务提交数量来讲第二种效率一定是最高的,以下我用一个例子说明。
- 建表
CREATE TABLE `t_test_batch` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`a` varchar(100) DEFAULT NULL,
`b` varch
标签:insert,事务,SpringBootJpa,写入,提交,sql,最牛,save,table
From: https://blog.csdn.net/baidu_34848066/article/details/145001433