插入记录时候,影响插入速度的主要是索引,唯一性校验,一次插入记录条数等,根据这些情况,可以分别进行优化,我们来看看有哪些优化的措施
myisam表优化方案
1.禁用索引
对于非空表,插入记录时,mysql会根据表的索引对插入的记录创建索引,如果插入大量数据,建立索引会降低插入记录的速度,为了解决这个情况,可以在插入记录之前禁用索引,数据插入完毕后在打开索引,禁用索引语句如下:
alter table table_name disable keys;
其中table_name 是表名
打开索引
alter table table_name enable keys;
如果是空表批量导入数据, 则不需要进行这个操作,因为myISAM引擎的表是在导入数据之后才建立索引的。
2.禁用唯一检查
插入数据时,mysql会对插入的记录进行唯一校验,这种唯一性校验也会降低插入记录的速度,为了降低这种情况对查询速度的影响,可以在插入记录前禁用唯一性检查,等到数据插入完毕后在开启,禁用唯一性检查的语句如下
set unique_checks=0
开启唯一性检查的语句如下:
set unique_checks=1;
3.使用批量插入
插入多条记录时,可以使用一条insert 语句插入一条记录,也可以使用一条insert语句插入多条记录
insert into table_name values(..''),(...''),('..')
4.使用load data infile 批量插入
当需要批量导入数据时候,如果使用load data infile语句,就尽量使用,因为这个比批量insert还快。
InnoDB表优化方案
1.禁用唯一性检查
插入数据之前执行 set unique_checks=0来禁用唯一索引的检查,数据导入完成后在开启检查,这个和myISAM是一致的
2.禁用外键检查
插入数据之前执行禁止外键的检查,数据插入完成之后在恢复对外键的检查,
禁用外键检查:
set foreign_key_checks=0
启用外键检查
set foreign_key_checks=1
3.禁止自动提交
插入数据之前禁止事务的自动提交,数据导入完成之后,执行恢复自动提交操作,
禁止自动提交语句如下
set autocommit=0
恢复自动提交语句
set autocommit=1