MySQL 9.0 发行说明
为了优化插入速度,请将许多小的操作组合成一个大的操作。理想情况下,您建立一个连接,一次性发送许多新行的數據,并将所有索引更新和一致性检查推迟到最后。
插入一行所需的时间由以下因素决定,其中数字表示大致的比例
连接: (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 必须执行的解析工作,并提高了插入速度。
请参阅 第 10.5.5 节,“InnoDB 表的批量数据加载”,了解针对
InnoDB
表的具体技巧。请参阅 第 10.6.2 节,“MyISAM 表的批量数据加载”,了解针对
MyISAM
表的具体技巧。