10bet网址
MySQL 5.7参考手册
相关的文档10bet官方网站 下载本手册
PDF(美国高级主任)- 36.3 mb
PDF (A4)- 36.4 mb
手册页(TGZ)- 237.6 kb
手册页(Zip)- 349.3 kb
信息(Gzip)- 3.4 mb
信息(邮政编码)- 3.4 mb
本手册节选

MySQL 5.7参考手册/.../ InnoDB表的批量数据加载

8.5.5 InnoDB表批量数据加载

这些性能技巧补充了快速插入的一般准则第8.2.4.1节,优化INSERT语句

  • 将数据导入InnoDB,关闭自动提交模式,因为它会为每个插入执行一次日志刷新。若要在导入操作期间禁用自动提交,请使用设置自动提交而且提交声明:

    设置自动提交= 0;...SQL导入语句…提交;

    , mysqldump选项——选择创建转储文件,以便快速导入到InnoDB桌子,即使没有包裹他们设置自动提交而且提交语句。

  • 如果你有独特的对辅助键的约束,你可以通过在导入会话期间临时关闭唯一性检查来加速表导入:

    设置unique_checks = 0;...SQL导入语句…设置unique_checks = 1;

    对于大表,这节省了大量磁盘I/O,因为InnoDB可以使用它的更改缓冲区在批处理中写入二级索引记录。确保数据不包含重复的键。

  • 如果你有外键你可以通过关闭导入会话期间的外键检查来加速表的导入:

    设置foreign_key_checks = 0;...SQL导入语句…设置foreign_key_checks = 1;

    对于大表,这可以节省大量磁盘I/O。

  • 使用多行插入语法,如果你需要插入很多行,减少客户端和服务器之间的通信开销:

    INSERT INTO yourtable VALUES(1,2),(5,5),…

    这个技巧适用于任何表中的插入,而不仅仅是插入InnoDB表。

  • 在对具有自动递增列的表进行批量插入时,设置innodb_autoinc_lock_mode改为2,而不是默认值1。看到章节14.6.1.6,InnoDB中的AUTO_INCREMENT处理获取详细信息。

  • 在执行批量插入时,插入行的速度更快主键秩序。InnoDB表使用聚集索引的顺序,这使得使用数据相对较快主键.执行批量插入主键对于不完全适合缓冲池的表,顺序尤其重要。

  • 对象加载数据时的最佳性能InnoDB全文索引,遵循以下步骤:

    1. 定义列FTS_DOC_ID在表创建时,类型Bigint unsigned not null的唯一索引FTS_DOC_ID_INDEX.例如:

      CREATE TABLE t1 (FTS_DOC_ID BIGINT unsigned NOT NULL AUTO_INCREMENT, title varchar(255) NOT NULL DEFAULT ", text mediumtext NOT NULL, PRIMARY KEY (' FTS_DOC_ID '))在t1上创建唯一索引FTS_DOC_ID_INDEX
    2. 将数据加载到表中。

    3. 创建全文数据加载后的索引。

    请注意

    当添加FTS_DOC_ID列在表创建时,确保FTS_DOC_ID属性时,将更新列全文索引列将被更新,如FTS_DOC_ID必须是单调递增的吗插入更新.如果您选择不添加FTS_DOC_ID在表创建时,有InnoDB为您管理DOC id,InnoDB添加了FTS_DOC_ID作为一个隐藏的列与下创建全文索引调用。但是,这种方法需要重新构建表,这会影响性能。