一次insert插入多条数据比insert循环插入数据效率高多少?
在MySQL中,一次插入多条数据的效率显著高于单条插入。实验数据显示,当插入30条数据时,批量插入速度比单条插入快近9倍。
效率差异原因
- 数据库操作次数:批量插入减少数据库写操作和网络传输次数,而单条插入需要执行相同次数的数据库操作。
- 日志写入优化:批量插入可减少MySQL二进制日志(binlog)和事务日志的写入量,降低磁盘写入频率。
- 网络传输成本:批量插入减少网络传输次数,尤其在网络条件较差时优势更明显。
适用场景建议
- 优先批量插入:适用于数据量较大(如超过10条记录)的场景,可大幅提升效率并降低资源消耗。 如:
<mapper namespace="com.soft.mapper.EmpExprMapper">
<!--批量保存员工工作经历信息
foreach 标签:
collection: 遍历的集合
item: 遍历出来的元素
separator: 每次循环之间的分隔符
-->
<insert id="insertBatch">
insert into emp_expr(emp_id, begin, end, company, job) values
<foreach collection="exprList" item="expr" separator=",">
(#{expr.empId},#{expr.begin},#{expr.end},#{expr.company},#{expr.job})
</foreach>
</insert>
</mapper>
- 单条插入场景:若数据量较小或需精确控制每条记录的错误处理(如业务要求高可用性),可选择单条插入。如:
for (EmpExpr empExpr : exprList) { empExpr.setEmpId(emp.getId()); empMapper.addEmpExpr(empExpr); }
浙公网安备 33010602011771号