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>
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>
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!