09怎样插入数据才能更高效?
影响插入速度的主要是索引、唯一性校验、一次插入记录条数等。针对这些情况,可以分别进行优化。对于MyISAM引擎的表,常见的优化方法如下:禁用索引对于非空表,插入记录时,MySQL会根据表的索引对插入的记录建立索引。如果插入大量数据,建立索引会降低插入记录的速度。为了解决这种情况,可以在插入记录之前禁用索引,数据插入完毕后再开启索引。对于空表批量导入数据,则不需要进行此操作,因为MyISAM引擎的表是在导入数据之后才建立索引的。禁用唯一性检查插入数据时,MySQL会对插入的记录进行唯一性校验。这种唯一性校验也会降低插入记录的速度。为了降低这种情况对查询速度的影响,可以在插入记录之前禁用唯一性检查,等到记录插入完毕后再开启。使用批量插入插入多条记录时,可以使用一条INSERT语句插入一条记录,也可以使用一条INSERT语句插入多条记录。使用一条INSERT语句插入多条记录的情形如下,而这种方式的插入速度更快。INSERTINTOfruitsVALUES(‘x1’,‘101’,‘mongo2’,‘5.7’),(‘x2’,‘101’,‘mongo3’,‘5.7’),(‘x3’,‘101’,‘mongo4’,‘5.7’);使用LOADDATAINFILE批量导入当需要批量导入数据时,如果能用LOADDATAINFILE语句,就尽量使用。因为LOADDATAINFILE语句导入数据的速度比INSERT语句快。对于InnoDB引擎的表,常见的优化方法如下:禁用唯一性检查插入数据之前执行setunique_checks=0来禁止对唯一索引的检查,数据导入完成之后再运行setunique_checks=1。这个和MyISAM引擎的使用方法一样。禁用外键检查插入数据之前执行禁止对外键的检查,数据插入完成之后再恢复对外键的检查。禁用自动提交插入数据之前禁止事务的自动提交,数据导入完成之后,执行恢复自动提交操作。
来自:数据库事务和优化-优化的常用规则