2011-02-10 10 views
1

私は、最初のカラムがインデックス化されたvarchar(256)(下のcol1を参照)の簡単なdbテーブルに挿入することを計画しています。ステートメントを挿入する前に。私のプロセスは次のようになります:mysql insertがスレッショルドを大幅に下回って遅くなります

 
alter table xxx disable keys; 
insert ignore into xxx(col1, col2) values('a',1), values('b',1), values('c',1)... 
alter table xxx enable keys; 

私は上記のステートメント(約100万の値のペア)を使用して一度に100万を挿入しています。
最初の15百万はかなり速くて一定である(30秒/ 100万の合理的な速度の中で)
しかし、今私はxxxにわずか1ミルの挿入の別のプロセスを開始した、それは永遠に完了していない)。
私に何かが不足していますか?何かを調整する必要はありますか?

+0

挿入または '有効keys'、時間がかかりますか? –

+0

PRIMARY/UNIQUEインデックスの2つの列のうちのどれですか? –

+0

挿入に時間がかかりますが、有効化キーはほとんど瞬時でした。いいえ、第1列だけが索引です(主キーではなく一意ではありません) – user121196

答えて

0

個別の挿入ではなく、mysqlのLOAD DATA INFILEコマンドを使用してください。これは通常、はるかに高速です。ドキュメントをチェックアウト:これはあなたからのデータを更新したり削除決して表の場合

また

http://dev.mysql.com/doc/refman/5.1/en/load-data.html

、あなたが(代わりにInnoDBのまたは任意の他の)アーカイブエンジンを使用して、テーブルを変換してみてください。このエンジンは大量のレコードを保存するために作られており、新しいレコードを挿入するのは非常に高速です。より多くのためにこれをチェックアウト:

http://dev.mysql.com/tech-resources/articles/storage-engine.html

関連する問題