我有一个流程,除了其他事情外,还需要对它所做的事情进行审计。此审计是对审核表的插入操作。我对它进行了基准测试,看起来这个审计让这个过程变慢了(两个数量级)。
audit表上有一些索引,删除所有索引并在过程结束后重新构建它们是不是一个好主意?
表结构为id(fk) | text | id (索引)|id(索引)|大约10个以上的文本字段
我有一个50的缓冲区,当它填满时,我将其全部作为批量插入进行插入。总的来说,我插入了大约300K条记录。
发布于 2011-11-15 02:48:45
如果您正在使用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一次性导入它们。同样,在加载数据之前禁用或丢弃密钥将大大提高速度。
https://stackoverflow.com/questions/8125646
复制相似问题