探索sql合并插入+事务性能问题
探索sql合并插入+事务性能问题
准备:
1:为了方便默认用thinkphp5框架来测试,直接下载官方的thinkphp5框架,部署到本地的环境,开启debug调试来追踪sql语句。
2:新建一个表为test,只有4个字段,分别为id、name、sex、value,id为主键。
测试:
用thinkphp自带的批量插入方法insertAll,该方法的原理就是合并插入,类似:
INSERT INTO `insert_table` ( `name`, `sex`, `value`) VALUES ('test',1,’test’), ('test',1,’test’), ('test',1,’test’), ('test',1,’test’);
首先插入100、1000、10000、100000、300000条数据
条数(单位:s) | 合并插入 | 合并插入+事务 |
100 | 0.002750s | 0.001528s |
1000 | 0.011679s | 0.030061s |
10000 | 0.093928s | 0.045280s |
100000 | 0.468550s | 0.321440s |
300000 | 1.854797s 1.711388s 1.998891s 平均:1.8550253s | 1.728942s 1.704502s 1.758191s 平均:1.730545s 分十次提交事务,每次3W: 平均秒:0.915599s 分六次提交事务,每次5W 平均秒:0.987794s 分三十次提交事务,每次1W 平均秒:0.883966s |
综上所述,采用合并插入+事务提交(每次1W左右的数据)速度最快,当然测试有点局限性,如果有错,欢迎留言提出。