改善散装刀片

时间:2011-11-14 17:35:49

标签: mysql performance insert bulkinsert

我有一个流程,其中包括需要对其工作进行审核。此审计是对审计表的INSERT。我对它进行了基准测试,似乎这次审核使得流程运行缓慢(两个数量级) 审计表上有一些索引,在进程结束后删除所有索引并重建它们是否是个好主意?

表结构是id(fk)|文字| id(索引)| id(索引)|大约10个以上的文本字段

我有一个50的缓冲区,当它填满时,我将它全部作为批量插入插入。总的来说,我插入约300K记录。

1 个答案:

答案 0 :(得分:0)

如果你正在使用MyISAM,你可以使用ALTER TABLE auditTable DISABLE KEYS,然后在完成插入后重新启用你的键(ALTER TABLE auditTable ENABLE KEYS)。但是,这只会禁用非唯一键。

http://dev.mysql.com/doc/refman/5.1/en/alter-table.html

  

可以为MyISAM表显式激活此功能。改变   表... DISABLE KEYS告诉MySQL停止更新非唯一索引

如果您有大PK /唯一键,丢弃键然后在导入后添加它们可能会快得多。

您还可以尝试将审核记录写入平面文件,然后使用LOAD DATA INFILE一次性导入它们。同样,在LOAD DATA之前禁用或丢弃密钥会大大加快速度。