mysql 高度な (15) mysql バッチで大量のデータを削除する

黄舟
リリース: 2017-02-10 11:04:09
オリジナル
1482 人が閲覧しました

mysql大量のデータをバッチで削除する

10001万レコードを持つテーブル(syslogs)があり、statusid=1を持つすべてのレコードを削除する必要があると仮定します。ビジネスを停止すると、600万件近くのエントリがあり、DELETE FROM syslogs WHERE statusid=1 を直接実行すると、lock wait timeout超過エラーにより削除が失敗したことがわかります。 。

このステートメントには多すぎるレコードが含まれるため、LIMITパラメータを使用してバッチで削除します。たとえば、すべての10000レコードを削除すると、次のようにMySQLを使用できます。ステートメントを完了します:

 DELETE FROM syslogs WHERE status=1 ORDER BY statusid LIMIT 10000;
ログイン後にコピー

を複数回実行して、これらのレコードを正常に削除します。

注:

一括削除を実行するときは、limitの使用に注意してください。 limitを使用しない場合、大量のデータを削除するとデッドロックが発生する可能性が高いためです。

deletewhereステートメントがインデックスにない場合は、まず主キーを見つけて、主キーに基づいてデータベースを削除できます。

誤用を防ぐために、更新削除を行う際には、制限1を追加することをお勧めします。

上記は、mysql の高度な、一括削除、および大量のデータの内容です。さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) にご注意ください。


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート