5つのテーブルに約4000万行の大きなデータベースがあります。私は、列が2番目のテーブルに存在しない値を持つ1つのテーブルから行を削除する必要があります。データを削除できませんでした。
DELETE FROM user_followersid WHERE followersIds_generatedId IN (SELECT * FROM generatedfollowers)
CREATE TABLE tempfollowersids as SELECT * FROM user_followersid WHERE followersIds_generatedId IN (SELECT generatedId from followersid WHERE followerId IN (SELECT * FROM topusers));
それは多くのを取る:私はいくつかの行を削除するだけでなく、私は別のテーブルに削除したくない行を挿入するクエリを記述しようとしている
削除の時間が経過し、最後に毎回失敗し、次のエラーが報告されます。
私は一度にLIMIT
を使用していくつかの行だけを削除しようとしましたが、それはまた多くの時間を費やしています。私はIN
が極端に遅いことを知っています。しかし、私はクエリを書くための代替方法を見つけることができません。
どのように行を削除する必要がありますか?
より小さいバッチのレコードを削除する必要があります(つまり、where句に追加のフィルタを追加することで、削除するレコードの数を制限してください)、mysqlの設定を変更する必要があります。アドバイスについては、http://rackerhacker.com/2010/02/16/mysql-the-total-number-of-locks-exceeds-the-lock-table-size-2/を参照してください。 – dash
'user_followersid.followersIds_generatedId'にインデックスがありますか? –