ホームページ >データベース >mysql チュートリアル >MySQL テーブル内の最新の N レコードを除くすべてのレコードを削除するにはどうすればよいですか?

MySQL テーブル内の最新の N レコードを除くすべてのレコードを削除するにはどうすればよいですか?

DDD
DDDオリジナル
2025-01-08 16:21:42922ブラウズ

How to Delete All but the Latest N Records in a MySQL Table?

古い 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 サイトの他の関連記事を参照してください。

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