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を使用しない場合、大量のデータを削除するとデッドロックが発生する可能性が高いためです。
deleteのwhereステートメントがインデックスにない場合は、まず主キーを見つけて、主キーに基づいてデータベースを削除できます。
誤用を防ぐために、更新や削除を行う際には、制限1を追加することをお勧めします。
上記は、mysql の高度な、一括削除、および大量のデータの内容です。さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) にご注意ください。