利用LOAD DATA特性实现数据批量写入

1. 引言

在开发引言程序时,经常会遇到要向数据库批量写入大量数据的场景,如数据初始化、数据迁移或者从外部系统导入数据等。传统的逐条插入方式在数据量较大时,性能会变得非常低下,因为每一次插入操作都需要与数据库建立连接、进行 SQL 解析和执行等一系列开销较大的操作。

MyBatis-Plus 作为一款优秀的 MyBatis 增强工具,为我们提供了多种数据操作方式,同时结合数据库自身的特性,如LOAD DATA语句,可以极大地提升批量写入数据的效率

2. 数据库LOAD DATA特性介绍

LOAD DATA是Mysql等数据库提供的一种高效的数据倒入语句,它允许从一个文本文件中快速地将数据加载到数据库表中,与传统的Insert语句相比,LOAD DATA具有以下优势:

  • 速度快:LOAD DATA是基于文件系统的操作,直接将文件的数据批量加载到数据库表中,避免了多次网络传输和SQL解析的开销,在处理大数据时,速度比逐条INSERT语句快很多倍
  • 减少事务开销: 传统的INSERT操作如果放在一个事务中,随着数据量的增加,事务的持续时间会变长,占用数据库资源。而LOAD DATA可以在短时间内完成大量数据的插入,减少了事务的持续时间,降低了锁竞争的可能性

例如:在Mysql中,LOAD DATA的基本语法

1
2
3
4
5
6
LOAD DATA [LOCAL] INFILE 'file_name'
INTO TABLE table_name
[FIELDS TERMINATED BY 'field_separator' [OPTIONALLY] ENCLOSED BY 'enclosure_character']
[LINES TERMINATED BY 'line_separator']
[IGNORE number LINES]
[(column_list)]
  • file_name: 要倒入数据的文本文件路径

  • table_name: 目标数据库表

  • FIELDS TERMINATED By: 指定字段之间的分割符

  • LINE TERMINATED BY 指定行之间的分割符

  • IGNORE number LINES: 表示忽略文件开头的指定行数

  • column_list: 指定要倒入数据对应的表列