MySQL 8.4 发行说明
为了优化插入速度,将多个小型操作合并成一个大型操作。理想情况下,您建立一个连接,一次性发送多个新行的
插入一行所需的时间取决于以下因素,其中数字表示大约的比例:
连接:(3)
将查询发送到服务器:(2)
解析查询:(2)
插入行:(1 × 行大小)
插入索引:(1 × 索引数量)
关闭:(1)
这没有考虑打开表的初始开销,该操作对每个并发运行的查询执行一次。
假设 B-树索引,表的大小会降低索引插入速度,呈 log N
的速度。
您可以使用以下方法来加快插入速度:
如果您在同一时间从同一客户端插入多行,请使用带有多个
VALUES
列表的INSERT
语句来一次插入多行。这比使用单独的单行INSERT
语句快得多(在某些情况下快几倍)。如果要向非空表添加数据,可以调整bulk_insert_buffer_size
变量以进一步加快数据插入速度。参见 第 7.1.8 节,“服务器系统变量”。当从文本文件加载表时,请使用
LOAD DATA
。这通常比使用INSERT
语句快 20 倍。参见 第 15.2.9 节,“LOAD DATA 语句”。利用列具有默认值这一事实。仅当要插入的值与默认值不同时才显式插入值。这减少了 MySQL 必须执行的解析,从而提高了插入速度。
有关针对
InnoDB
表的具体提示,请参见 第 10.5.5 节,“针对 InnoDB 表进行批量数据加载”。有关针对
MyISAM
表的具体提示,请参见 第 10.6.2 节,“针对 MyISAM 表进行批量数据加载”。