問題:何百もの同一の(スキーマ)テーブル。これらの中には、削除する必要のある重複したデータがあります。これに対する私の通常の戦略は次のとおりです。mysql:クライアントのタイムアウトを回避しながら重複を削除する
walk list of tables - for each do
create temp table with unique key on all fields
insert ignore select * from old table
truncate original table
insert select * back into original table
drop or clean temp table
小さいテーブルの場合、これは問題ありません。残念ながら、私が頻繁にクリーニングしているテーブルには100万のレコードがありますので、私が実行している間に私の仕事とクライアントの接続がタイムアウトしています。 (これらのテーブルが何百もあるので、私はPerlを使ってリストを歩き、それぞれをきれいにしています。これがタイムアウトが起こる場所です)。
私はに探していますいくつかのオプション:
mysqldumpを - 高速だが、私はそれに続くOUTFILE /負荷INFILEにステップ
「を無視挿入」を実行する方法を見ていない - も速いのが、私はリモートホストから実行しており、 'outfile'にはmysqlサーバ上のすべてのファイルが作成されます。クリーンアップするのは難しい。
100Kレコードのブロックで挿入/選択します。これにより、dbタイムアウトは回避されますが、かなり遅くなります。
私は確かに良い方法があります。提案?
[これはおそらく助けてください。](http://stackoverflow.com/questions/2385921/deleting-duplicates-from-a-large-table) – tuxuday
私は 'alter ignore'ルートを試してみます終了する前にタイムアウトします。 – ethrbunny