ホームページ >データベース >mysql チュートリアル >SQL を使用して MySQL テーブル内の最新の N レコードを除くすべてのレコードを削除する方法

SQL を使用して MySQL テーブル内の最新の N レコードを除くすべてのレコードを削除する方法

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-08 16:11:42834ブラウズ

How to Delete All But the Latest N Records in a MySQL Table Using SQL?

古い MySQL レコードの効率的な削除: 最新の N レコードのみを保持する

MySQL は、サブクエリ内の LIMIT 句を使用したレコードの削除を直接サポートしていません。 ただし、ネストされたサブクエリを使用してクリーンなソリューションを実現できます。

id 列 (降順) で並べられた最新の N 個のエントリを除くすべてのエントリを削除する必要があるとします。このアプローチにより、LIMIT ステートメントで直接 DELETE を使用するというよくある落とし穴が回避されます。

次のクエリはこれを効率的に実現します:

<code class="language-sql">DELETE FROM `table`
WHERE id NOT IN (
  SELECT id
  FROM (
    SELECT id
    FROM `table`
    ORDER BY id DESC
    LIMIT N
  ) as latest_records
);</code>

このクエリはサブクエリ (latest_records) を利用して、最新の N 個のレコードの ID を識別します。 次に、外側の DELETE ステートメントは、このセット内で ID がではないである行をすべて削除します。

特定のテーブル構造とデータ量に応じて、パフォーマンスをさらに最適化できることに注意してください。 パフォーマンスを大幅に向上させるために、id 列にインデックスを追加することを検討してください。

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

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