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

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

DDD
リリース: 2025-01-08 16:21:42
オリジナル
932 人が閲覧しました

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

古い MySQL レコードを効率的に削除し、最新の N レコードのみを保持します

MySQL テーブル内の最新の N エントリを除くすべてのエントリを削除するには、慎重なクエリ構築が必要です。 LIMIT ステートメント内で DELETE を使用する単純なアプローチは、MySQL の制限により失敗することがよくあります。

一般的な欠陥のある試みは次のようになります:

DELETE FROM `table`
ORDER BY `id` ASC
LIMIT ((SELECT COUNT(*) FROM `table`) - N);
ログイン後にコピー

MySQL では LIMIT 句内で直接サブクエリを許可しないため、これは失敗します。

堅牢なソリューションでは、ネストされたサブクエリを使用します。

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`
);
ログイン後にコピー

このメソッドは、最初に内部サブクエリを使用して、N 個の最新レコード (id の降順) の ID を選択します。次に、外側のクエリは、この内側の選択に ID が存在しないを持つすべてのレコードを削除します。これにより、事実上、最新の N 個のエントリのみが保持されます。

42 を希望する N の値に置き換えることを忘れないでください。 大規模なデータセットで最適なパフォーマンスを得るには、さらなる最適化手法が必要になる場合があります。 代替アプローチを検討し、速度を大幅に向上させるために id 列のインデックス作成を検討してください。 特定のパフォーマンスのニーズに合わせた高度なソリューションについては、追加のリソースを参照してください。

以上がMySQL テーブル内の最新の N レコードを除くすべてのレコードを削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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