批量写入为什么快不起来
逐条提交和一次提交,差的是几十倍。
最贵的是提交
每次写入都单独提交时,数据库要把数据真正刷到磁盘并保证一致,这个代价远大于写本身。把大量写入合并到一次提交里,往往能带来几十倍的差距。
包在事务里
一批写入用一个事务包起来,是收益最大也最简单的一项改动。注意事务别开得太长,中间不要夹网络请求一类的耗时操作。
语句本身也能省
逐条拼接的插入语句可以合并成一条多值插入,减少解析和调度的开销。数据量特别大时,再考虑用数据库提供的批量导入通道。
别忘了索引的开销
写入时要同步更新索引。批量导入前临时去掉非必要索引、导入完再加回来,是常见做法,但要注意异常时别把索引漏加回去。