“优化插入记录的速度”的版本间的差异
跳到导航
跳到搜索
Jihongchang(讨论 | 贡献) |
Jihongchang(讨论 | 贡献) |
||
第39行: | 第39行: | ||
=== 优化 insert 语句 === | === 优化 insert 语句 === | ||
+ | 插入多条记录时,可以采取两种写 insert 语句的方式。 | ||
+ | |||
+ | ==== 第一种是一个 insert 语句插入多条记录 ==== | ||
+ | <syntaxhighlight lang="sql"> | ||
+ | insert into food values (NULL, 'EE 果冻', 'EE 果冻厂', 1.5, '2007', 2, '北京'), | ||
+ | (NULL, 'FF 咖啡', 'FF 咖啡厂', 20, '2002', 5, '天津'), | ||
+ | (NULL, 'GG 奶糖', 'GG 奶糖厂', 14, '2003', 3, '广东'); | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ==== 第二种是一个 insert 语句只插入一条记录,执行多个 insert 语句来插入多条记录 ==== | ||
+ | <syntaxhighlight lang="sql"> | ||
+ | insert into food values (NULL, 'EE 果冻', 'EE 果冻厂', 1.5, '2007', 2, '北京'); | ||
+ | insert into food values (NULL, 'FF 咖啡', 'FF 咖啡厂', 20, '2002', 5, '天津'); | ||
+ | insert into food values (NULL, 'GG 奶糖', 'GG 奶糖厂', 14, '2003', 3, '广东'); | ||
+ | </syntaxhighlight>第一种方式减少了与数据库之间的连接等操作,其速度比第二种方式要快。 | ||
+ | |||
+ | 另:当插入大量数据时,建议使用一个 insert 语句插入多条记录的方式。 | ||
+ | |||
+ | 而且,如果能用 load data infile 语句,就尽量用 load data infile 语句。 | ||
+ | |||
+ | 因为 load data infile 语句导入数据的速度比 insert 语句的速度快。 |
2024年7月10日 (三) 02:34的最新版本
插入记录时,索引、唯一性校验都会影响插入记录的速度
禁用索引
插入记录时,MySQL 会根据表的索引对插入的记录进行排序。
如果插入大量数据时,这些排序会降低插入记录的速度。
为了解决这种情况,在插入记录之前先禁用索引。
等到记录都插入完毕后再开启索引。
禁用索引
alter table 表名 disable keys;
重新开启索引
alter table 表名 enable keys;
对于新创建的表,可以先不创建索引。等到记录都导入以后再创建索引。这样可以提高导入数据的速度。
禁用唯一性校验
插入数据时,MySQL 会对插入的记录进行唯一性校验。这种校验也会降低插入记录的速度。
可以在插入记录之前禁用唯一性检查。等到记录插入完毕后再开启。
禁用唯一性检查
set unique_checks=0;
重新开启唯一性检查
set unique_checks=1;
优化 insert 语句
插入多条记录时,可以采取两种写 insert 语句的方式。
第一种是一个 insert 语句插入多条记录
insert into food values (NULL, 'EE 果冻', 'EE 果冻厂', 1.5, '2007', 2, '北京'),
(NULL, 'FF 咖啡', 'FF 咖啡厂', 20, '2002', 5, '天津'),
(NULL, 'GG 奶糖', 'GG 奶糖厂', 14, '2003', 3, '广东');
第二种是一个 insert 语句只插入一条记录,执行多个 insert 语句来插入多条记录
insert into food values (NULL, 'EE 果冻', 'EE 果冻厂', 1.5, '2007', 2, '北京');
insert into food values (NULL, 'FF 咖啡', 'FF 咖啡厂', 20, '2002', 5, '天津');
insert into food values (NULL, 'GG 奶糖', 'GG 奶糖厂', 14, '2003', 3, '广东');
第一种方式减少了与数据库之间的连接等操作,其速度比第二种方式要快。
另:当插入大量数据时,建议使用一个 insert 语句插入多条记录的方式。
而且,如果能用 load data infile 语句,就尽量用 load data infile 语句。
因为 load data infile 语句导入数据的速度比 insert 语句的速度快。