8.5.5 Bulk Data Loading for InnoDB Tables 批量数据加载到InnoDB 表
这个性能tips 补充常用的准则用于快速插入数据Section 8.2.2.1, “Speed of INSERT Statements”.
当数据插入到InnoDB,关闭自动提交模式,因为它执行一个log flush 到磁盘在每次插入。
关闭自动提交在你的导入操作
SET autocommit=0;
… SQL import statements …
COMMIT;
mysqldump 选项 –opt 创建dump 文件快速导入到一个InnoDB 表,
即使没有包装和设置autocommit和COMMIT 语句:
如果你有一个唯一约束 在secondary keys,你可以加速表导入通过使用临时关闭 唯一检查在你导入的会话:
SET unique_checks=0;
… SQL import statements …
SET unique_checks=1;
对于大表,这个可以节约大量的磁盘 I/O, 因为InnoDB 可以使用它的change buffer
来写 secondary index records in a batch. 确认数据没有重复
如果你的表有FOREIGN KEY 约束在你的表里, 你可以加速表导入通过关掉外键约束在导入期间:
SET foreign_key_checks=0;
… SQL import statements …
SET foreign_key_checks=1;
对于大表,这样可以节省磁盘I/O
Use the multiple-row INSERT syntax ,降低连接开销在客户端和服务端 如果你需要插入很多记录
INSERT INTO yourtable VALUES (1,2), (5,5), …;
这个技巧是有效的对于插入到任何表,不只是InnoDB 表:
当做批量插入表在 auto-increment columns, 设置innodb_autoinc_lock_mode 为2 代替默认值1
为获得最佳性能,当加载数据到InnoDB FULLTEXT 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
)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE UNIQUE INDEX FTS_DOC_ID_INDEX on t1(FTS_DOC_ID);
Load the data into the table.
Create the FULLTEXT index after the data is loaded.