最近在做分销功能的按组分销模块时,一次需要插入一万多条数据,同时还需要获得插入数据的主键 id ,用于后续逻辑的使用。
最初我是通过循环,一条一条的插入,然后一边插入,一边执行数据更新。这种方式,慢到自己都不能忍,更何况是用户了,于是想到了使用批量插入的方式进行优化。
在网上查了查,批量插入主要有三种方式:
1、循环插入(这种方式就是我开篇介绍的方式,慢到不能忍);
2、使用事务提交(这种方式我觉得操作起来很麻烦,没有采用);
3、将SQL语句进行拼接,使用
insert into table () values (),(),(),()然后再一次性插入。如果字符串太长,则需要配置下MYSQL,在
mysql 命令行中运行 :set global max_allowed_packet =
2*1024*1024*10;(我采用了这种方式,速度非常快)
$insetSql = "INSERT INTO hotel_room_fenxiao (`id`,`room_id`,`pfs_id`,`add_id`,`fxs_id`,`add_price`,`is_effect`) VALUES ";
foreach ($insert_arr as $tmpInserInfo){
$insetSql .= "({$tmpInserInfo['id']},{$tmpInserInfo['room_id']},{$tmpInserInfo[