2011-11-14 20 views
0

私はプロセスを持っています。その中でも、何が行われているのかを監査する必要があります。この監査は、監査テーブルへのINSERTです。私はそれをベンチマークしました。この監査ではプロセスが遅くなっているようです(2桁のオーダー)。
監査テーブルにはいくつかのインデックスがあります。すべてのインデックスを削除し、プロセスが終了すると再構築することをお勧めしますか?バルクインサートの改善

テーブル構造はid(fk)です。テキスト| id(indexed)| id(indexed)|約10個以上のテキストフィールド

私は50のバッファを持っています。いっぱいになると、それを一括挿入として挿入します。全体的に私は約300Kのレコードを挿入します。

+1

テーブルスキーマとは何ですか?あなたは何を正確に実行していますか?多くの行の値を持つ単一のINSERT、または行ごとに1つの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テーブルに対して明示的に有効にすることができます。 TABLE ... DISABLE KEYSをALTERあなたが大規模なPK /ユニークキーを持っている場合、MySQLはおそらくはるかに高速になり、バックあなたのインポート後にそれらを追加し、その後、キーを落とし、非一意索引

の更新を停止するように指示。

また、監査レコードをフラット・ファイルに書き込んでから、LOAD DATA INFILEを使用してすべてを一度にインポートすることもできます。また、LOAD DATAの前にキーを無効にするかドロップすると、処理が高速になります。