ホームページ  >  記事  >  データベース  >  mysql 高度な (15) mysql バッチで大量のデータを削除する

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

黄舟
黄舟オリジナル
2017-02-10 11:04:091487ブラウズ

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) にご注意ください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。