8.5.5 InnoDBtable 的批量数据加载

这些性能提示补充了有关在第 8.2.4.1 节“优化 INSERT 语句”中快速插入的一般准则。

SET autocommit=0;
... SQL import statements ...
COMMIT;

mysqldump选项--opt创建的转储文件可以快速导入到InnoDBtable 中,即使不使用SET autocommitCOMMIT语句包装它们也是如此。

SET unique_checks=0;
... SQL import statements ...
SET unique_checks=1;

对于大 table,这可以节省大量磁盘 I/O,因为InnoDB可以使用其更改缓冲区来批量写入辅助索引记录。确保数据不包含重复的密钥。

SET foreign_key_checks=0;
... SQL import statements ...
SET foreign_key_checks=1;

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

INSERT INTO yourtable VALUES (1,2), (5,5), ...;

该技巧适用于插入到任何 table 中,而不仅仅是InnoDB个 table。

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);

Note

在创建 table 时添加FTS_DOC_ID列时,请确保在更新FULLTEXT索引列时更新FTS_DOC_ID列,因为FTS_DOC_ID必须与每个INSERTUPDATE单调增加。如果选择不在 table 创建时添加FTS_DOC_ID并让InnoDB为您 ManagementDOC ID,则InnoDB将在下一个创建全文索引调用中将FTS_DOC_ID添加为隐藏列。但是,这种方法需要重建 table,这会影响性能。

首页