2011-09-13 10 views
0

のMySQL/ASPを削除する - 重複行
私は 'photoSearch' と呼ばれる100,000行を持つテーブルがあるに削除します。他のテーブルからのデータを転送するとき(私は血まみれの年齢を取っていて疲れていました)、私は一度にすべてを転送する前にテーブルの3500行を残したテスト転送を忘れてしまった。のMySQL/ASP - 重複行

IDの列は 'photoID'(INT)なので、photoIDが6849未満のすべての重複を削除する必要があります。重複を削除するだけであれば、テーブルを削除して開始するよりも苦労することはありません別の転送。

は、誰もがこれを行うための最も実用的かつ安全な方法上の任意の提案を持っていますか?


UPDATE:私は実際に自分の質問に答え

。私は安全のために私のテーブルをバックアップし、その後、私はこれ走っ:

ALTER TABLE photoSearchがUNIQUE INDEXのunique_id_index(PHOTOID)を追加IGNOREを。

これは分:)


+0

あなたはphotoSearch構造を与えることができますか? –

答えて

0

従来の方法

バックアップ使用してtmp_photoSearchのようなものに、既存のテーブルphotoSearch

create table tmp_photoSearch select * from photoSearch; 

の下にあるすべての3500個の重複を削除その後、テーブルtmp_photoSearchにデータマッサージ。
期待どおりの結果を得た後、
は(ボトルネックは、ネットワーク転送でない場合)、挿入速度を上げるには、スワップテーブルに

rename table photoSearch to photoSearch_backup, tmp_photoSearch to photoSearch; 

を行い、

http://dev.mysql.com/doc/refman/5.0/en/insert-speed.html

キーCACを拡大し、は、LOAD DATA INFILEとINSERTの両方のために、MyISAMテーブルのパフォーマンスを向上させるために

彼は、変数key_buffer_sizeはシステムを増やすことで

+0

あなたの提案をお寄せいただきありがとうございますが、おそらくそれはおそらく、アマチュアとしてはちょっと難解でした。私は実際に私自身の質問に答えました。安全のためにテーブルをバックアップしてから、これを実行しました: ALTER IGNORE TABLE photoSearch ADD UNIQUE INDEX unique_id_index(photoID); これで1分以内に3500の複製がすべて削除されました:) – TheCarver