这些性能技巧补充了快速插入的一般准则第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
全文
索引,遵循以下步骤:定义列
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
将数据加载到表中。
创建
全文
数据加载后的索引。