高效删除较旧的 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中文网其他相关文章!