MySQL优化–插入的优化
标签(空格分隔): MySQL
插入数据时,影响插入速度的主要是索引、唯一性校验、一次插入的数据条数等。
插入数据的优化,不同的存储引擎优化手段不一样,在MySQL中常用的存储引擎有,MyISAM和InnoDB,两者的区别:
http://www.cnblogs.com/panfeng412/archive/2011/08/16/2140364.html
MyISAM优化
禁用索引
对于非空表,插入记录时,MySQL会根据表的索引对插入的记录建立索引。如果插入大量数据,建立索引会降低插入数据速度。
为了解决这个问题,可以在批量插入数据之前禁用索引,数据插入完成后再开启索引。
禁用索引的语句:
ALTER TABLE table_name DISABLE KEYS
开启索引语句:
ALTER TABLE table_name ENABLE KEYS
对于空表批量插入数据,则不需要进行操作,因为MyISAM引擎的表是在导入数据后才建立索引。
禁用唯一性检查
唯一性校验会降低插入记录的速度,可以在插入记录之前禁用唯一性检查,插入数据完成后再开启。
禁用唯一性检查的语句:SET UNIQUE_CHECKS = 0;
开启唯一性检查的语句:SET UNIQUE_CHECKS = 1;
批量插入数据
插入数据时,可以使用一条INSERT语句插入一条数据,也可以插入多条数据b
insert table values(),();
insert table value();
insert table value();
一次性插入多条数据性能高于多次插入
使用LOAD DATA INFILE
当需要批量导入数据时,使用LOAD DATA INFILE语句比INSERT语句插入速度快很多。
InnoDB优化
禁用唯一性检查
用法和MyISAM一样。
禁用外键检查
插入数据之前执行禁止对外键的检查,数据插入完成后再恢复,可以提供插入速度。
禁用:SET foreign_key_checks = 0;
开启:SET foreign_key_checks = 1;
禁止自动提交
插入数据之前执行禁止事务的自动提交,数据插入完成后再恢复,可以提供插入速度。
禁用:SET autocommit = 0;
开启:SET autocommit = 1;