前言:批量插入的性能挑战
场景描述
在实际开发中,如考试系统、订单处理、日志存储等场景,经常需要批量插入大量数据。例如,在一个在线考试系统中,创建一份试卷需要插入多张表的数据:
- 试卷表(exam):存储试卷的基本信息。
- 题目表(question):存储题目信息。
- 选项表(option):存储题目下所有选项信息。
在保存试卷时,需要关联保存试卷、题目以及题目选项,此时对于保存的性能就有较高的要求了。
性能瓶颈
- 逐条插入效率低:传统的逐条插入模式效率欠佳,每次插入数据时都要与数据库进行交互,从而产生较高的网络开销以及数据库解析成本。
- 外键关系处理复杂:题目与选项之间存在外键关联,这就需要在插入数据后获取主键 ID,无疑增加了操作的复杂程度。
- 批量操作性能有限:使用默认的 saveBatch 方法,其性能提升并不显著,难以满足高并发、大数据量的实际需求。