高效刪除較舊的 MySQL 記錄,僅保留最新的 N
刪除 MySQL 表中除最新 N 個條目之外的所有條目需要仔細的查詢建構。 由於 MySQL 的限制,在 LIMIT
語句中使用 DELETE
的直接方法通常不會成功。
常見的有缺陷的嘗試如下所示:
<code class="language-sql">DELETE FROM `table` ORDER BY `id` ASC LIMIT ((SELECT COUNT(*) FROM `table`) - N);</code>
這會失敗,因為 MySQL 不允許直接在 LIMIT
子句中使用子查詢。
強大的解決方案採用巢狀子查詢:
<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>
此方法首先使用內部子查詢選擇 N 個最新記錄的 ID(按 id
降序排列)。然後,外部查詢將刪除 ID 不 出現在此內部選擇中的所有記錄。這實際上只保留了最新的 N 個條目。
請記得將 42
替換為您想要的 N
值。 為了獲得大型資料集的最佳效能,可能需要進一步的最佳化技術。 探索替代方法並考慮對 id
列建立索引以顯著提高速度。 請諮詢其他資源,以了解針對特定效能需求量身訂製的進階解決方案。
以上是如何刪除MySQL表中除最新N筆記錄之外的所有記錄?的詳細內容。更多資訊請關注PHP中文網其他相關文章!