2017-06-03 5 views
0

私は数億行のデータを持つテーブルを持っています。私はテーブルを削除したいが、私がテーブルで行うすべての操作は、データベースに設定した60,000秒のタイムアウト条件の下にある50,000 +秒(約16時間)の実行後に接続が失われる。私はドロップテーブルコードを使用してストアドプロシージャを作成しようとしましたが、DBに情報を送信して操作を実行すると、処理するための接続は必要ありませんが、同じことが行われると考えています。ちょうどタイムアウトですか?あるいは何か他のことをする必要がありますか?ドロップ中のMYSQLテーブルのタイムアウト

+0

を参照してくださいおそらく、バッチでデータを削除してみてください?主キーまたは行番号に基づいて、一度に数百万行を削除します。その後、すべてのデータを削除したら、テーブルを削除することができます。 –

+0

私はそのショットを与えますが、Limit 0,10の単純なクエリを実行しても "接続が失われます"。 –

+0

私は次のコードを試しています:DELETE FROM Table_Data WHERE Company_ID LIKE '%A%' LIMIT 0、1000000;現在、稼働時間は14時間です。 –

答えて

0

代わりにTRUNCATE TABLEを実行してください。内部的には、等価ですが空の表を作成してからスワップします。この手法は、非常に大きなテーブルであっても、1秒かかる場合があります。

あなたがテーブルの最もを削除する場合、それはあなたがすべてを削除する必要がないのはなぜ

CREATE TABLE new LIKE real; 
INSERT INTO new 
    SELECT ... FROM real 
     WHERE ... -- the rows you want to keep 

を行うには、(時々たくさん速い)は通常より速いのですか?巨大なテーブルのうち大きな塊を含む大規模な削除では他の技術については、

https://mariadb.com/kb/en/mariadb/big-deletes/

+0

TRUNCATEも試みましたが、タイムアウトするまで実行されます。セッションの制限時間を変更し、これらのメソッドを再度試しています。テーブル上でクエリを実行するたびに、元の60,000秒に近い時間が経過するため、削除しています。だから私は、クエリの時間を短縮するために、最初からやり直してより小さなセグメントに分割することを望んでいました。テーブルにも重複した情報があるので、最初からやり直すのが理にかなっています。 –

+0

InnoDBは終了する前に死んでしまった場合、挿入を「ロールバック」する必要がありますか? 'SHOW CREATE TABLE'を提供してください。 –

関連する問題