应用场景
场景描述
当一次操作中将多条记录写入数据库时,相比逐条插入,批量插入可以减少数据库与应用程序之间的交互次数,降低网络延迟和系统资源消耗,从而显著提高数据写入效率。
本章通过实现批量插入介绍如何使用GO驱动连接数据库、使用事务、批量插入以及获取结果集列信息等操作。
触发条件
应用代码中生成批量插入SQL语句并绑定参数,在事务中调用Exec接口执行该SQL语句,最终进行批量插入操作。
业务影响
- 降低网络交互成本。
将多条INSERT合并为一次批量操作,可显著降低客户端与数据库之间的网络往返次数,进而实现提升整体吞吐量,以及减轻网络拥塞对性能的影响。
- 提高数据处理效率
逐条插入方式需要数据库对每条SQL都进行语法解析和执行计划生成,批量插入只需一次解析和一次执行计划,避免了多次重复工作,节省了CPU周期和内存分配时间。
- 降低系统资源使用开销
逐条插入方式通常会触发一次事务提交或至少一次事务日志写入,而批量插入可在一次事务内插入多条记录,显著减少提交次数,降低事务日志压力和事务管理开销。减少网络包处理、事务管理、日志写入和行格式转换的总次数,有助于减轻数据库服务器的CPU负载和内存临时空间占用,从而将更多资源留给核心查询与计算操作。
- 评估内存的使用
构建批量插入的SQL语句时,如果数据量过大,会导致内存占用显著增加。尤其是当使用字符串拼接方式构建SQL语句时,内存消耗可能会急剧上升。过大的批量处理可能导致超出数据库或驱动的最大SQL长度限制,或者触发其他参数限制,从而引发错误或性能问题。
批量插入和逐条插入的对比:
方式 |
优点 |
缺点 |
---|---|---|
逐条插入 |
|
|
批量插入 |
|
|
适用版本
仅支持GaussDB 503.1.0及以上版本。