Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Memadam Semua kecuali Rekod N Terkini dalam Jadual MySQL?

Bagaimana untuk Memadam Semua kecuali Rekod N Terkini dalam Jadual MySQL?

DDD
Lepaskan: 2025-01-08 16:21:42
asal
882 orang telah melayarinya

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

Mengalih Keluar Rekod MySQL Lama Dengan Cekap, Menyimpan Hanya N Terkini

Memadam semua kecuali entri N terbaru dalam jadual MySQL memerlukan pembinaan pertanyaan yang teliti. Pendekatan mudah menggunakan LIMIT dalam pernyataan DELETE selalunya tidak berjaya disebabkan oleh pengehadan MySQL.

Percubaan cacat biasa kelihatan seperti ini:

<code class="language-sql">DELETE FROM `table`
ORDER BY `id` ASC
LIMIT ((SELECT COUNT(*) FROM `table`) - N);</code>
Salin selepas log masuk

Ini gagal kerana MySQL tidak membenarkan subqueries terus dalam klausa LIMIT.

Penyelesaian teguh menggunakan subkueri bersarang:

<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>
Salin selepas log masuk

Kaedah ini mula-mula memilih ID bagi N rekod terbaharu (disusun dengan id menurun) menggunakan subkueri dalam. Pertanyaan luar kemudian memadamkan semua rekod yang IDnya tidak hadir dalam pilihan dalaman ini. Ini berkesan hanya mengekalkan N entri terkini.

Ingat untuk menggantikan 42 dengan nilai N yang anda inginkan. Untuk prestasi optimum dengan set data yang besar, teknik pengoptimuman selanjutnya mungkin diperlukan. Terokai pendekatan alternatif dan pertimbangkan untuk mengindeks lajur id anda untuk peningkatan kelajuan yang ketara. Rujuk sumber tambahan untuk penyelesaian lanjutan yang disesuaikan dengan keperluan prestasi khusus.

Atas ialah kandungan terperinci Bagaimana untuk Memadam Semua kecuali Rekod N Terkini dalam Jadual MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan