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