大批量插入数据

MyISAM 表

对于 MyISAM 存储引擎的表,可以通过以下方式快速地导入大量的数据:

ALTER TABLE <table_name> DISABLE KEYS;

LOAD DATA INFILE 'file_name' INTO TABLE <table_name>;

ALTER TABLE <table_name> ENABLE KEYS;

DISABLE KEYS ENABLE KEYS 用来打开或者关闭 MyISAM 表非唯一索引的更新

  • 在导入大量的数据到一个非空的 MyISAM 表时,通过设置这两个命令,可以提高导入的效率。

  • 对于导入大量数据到一个空的 MyISAM 表,默认就是先导入数据然后才创建索引的,所以不用进行设置。

InnoDB 表

对于 InnoDB 类型的表,可以有以下几种方式提高 InnoDB 表的导入效率:

  1. 因为 InnoDB 类型的表是按照主键的顺序保存的,所以将导入的数据按照主键的顺序排列(文件内),可以有效地提高导入数据的效率。

  2. 在导入数据前执行 SET UNIQUE_CHECKS=0,关闭唯一性校验;在导入结束后执行 SET UNIQUE_CHECKS=1,恢复唯一性校验,可以提高导入的效率。

    SET UNIQUE_CHECKS = 0;
    
    LOAD DATA INFILE 'file_name' INTO TABLE <table_name>;
    
    SET UNIQUE_CHECKS = 1;
  3. 如果应用使用自动提交的方式,建议在导入前执行 SET AUTOCOMMIT=0,关闭自动提交;导入结束后再执行 SET AUTOCOMMIT=1,打开自动提交,也可以提高导入的效率。

    SET AUTOCOMMIT = 0;
    
    LOAD DATA INFILE 'file_name' INTO TABLE <table_name>;
    
    SET AUTOCOMMIT = 1;

最后更新于