我有一个流程,其中包括需要对其工作进行审核。此审计是对审计表的INSERT。我对它进行了基准测试,似乎这次审核使得流程运行缓慢(两个数量级) 审计表上有一些索引,在进程结束后删除所有索引并重建它们是否是个好主意?
表结构是id(fk)|文字| id(索引)| id(索引)|大约10个以上的文本字段
我有一个50的缓冲区,当它填满时,我将它全部作为批量插入插入。总的来说,我插入约300K记录。
答案 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之前禁用或丢弃密钥会大大加快速度。