2011-11-14 50 views
0

我有一個過程,除其他事項外,需要對其執行的操作進行審覈。此審計是對審計表的INSERT。我對它進行了基準測試,似乎這次審計正在使流程運行緩慢(兩個數量級)。
審計表上有一些索引,如果刪除所有索引並在進程結束後重建它們,是不是一個好主意?改進批量插入

表結構是id(fk)|文字| id(索引)| id(索引)|大約10個以上的文本字段

我有一個50的緩衝區,當它填滿時,我將它全部插入爲批量插入。總體而言,我插入了約300K條記錄。

+1

什麼是表格模式?你正在運行什麼查詢 - 一個具有多行值的INSERT或每行一個INSERT查詢? – TehShrike

+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表被激活。 ALTER TABLE ... DISABLE KEYS讓MySQL停止更新非唯一索引

如果你有大PK /唯一鍵,刪除鍵然後將其添加您的進口回來後很可能會快很多。

您也可以嘗試將審計記錄寫入平面文件,然後使用LOAD DATA INFILE一次性導入它們。同樣,在LOAD DATA之前禁用或放棄您的密鑰會大大加快速度。