ホームページ >データベース >mysql チュートリアル >MySQL テーブル内の最新の N レコードを除くすべてのレコードを削除するにはどうすればよいですか?
古い MySQL レコードを効率的に削除し、最新の N レコードのみを保持します
MySQL テーブル内の最新の N エントリを除くすべてのエントリを削除するには、慎重なクエリ構築が必要です。 LIMIT
ステートメント内で DELETE
を使用する単純なアプローチは、MySQL の制限により失敗することがよくあります。
一般的な欠陥のある試みは次のようになります:
<code class="language-sql">DELETE FROM `table` ORDER BY `id` ASC LIMIT ((SELECT COUNT(*) FROM `table`) - N);</code>
MySQL では LIMIT
句内で直接サブクエリを許可しないため、これは失敗します。
堅牢なソリューションでは、ネストされたサブクエリを使用します。
<code class="language-sql">DELETE FROM `table` WHERE `id` NOT IN ( SELECT `id` FROM ( SELECT `id` FROM `table` ORDER BY `id` DESC LIMIT 42 -- Replace 42 with your desired N ) AS `subquery` );</code>
このメソッドは、最初に内部サブクエリを使用して、N 個の最新レコード (id
の降順) の ID を選択します。次に、外側のクエリは、この内側の選択に ID が存在しないを持つすべてのレコードを削除します。これにより、事実上、最新の N 個のエントリのみが保持されます。
42
を希望する N
の値に置き換えることを忘れないでください。 大規模なデータセットで最適なパフォーマンスを得るには、さらなる最適化手法が必要になる場合があります。 代替アプローチを検討し、速度を大幅に向上させるために id
列のインデックス作成を検討してください。 特定のパフォーマンスのニーズに合わせた高度なソリューションについては、追加のリソースを参照してください。
以上がMySQL テーブル内の最新の N レコードを除くすべてのレコードを削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。