【发布时间】:2019-05-15 12:15:31
【问题描述】:
我收到了一个 MySQL 查询,用于删除数百万个我试图添加 LIMIT 的整体,这也是 ASC 的 ORDERS。我不知道自己在做什么,而且我很困惑。
据我了解,您无法限制多表 DELETE,但我发现绕过此问题的解决方案过于复杂,我无法自行调整。
DELETE a,b,c
FROM wp_posts a
LEFT JOIN wp_term_relationships b ON ( a.ID = b.object_id )
LEFT JOIN wp_postmeta c ON ( a.ID = c.post_id )
LEFT JOIN wp_term_taxonomy d ON ( d.term_taxonomy_id = b.term_taxonomy_id )
LEFT JOIN wp_terms e ON ( e.term_id = d.term_id )
WHERE d.taxonomy = 'edd_log_type' AND a.post_type = 'edd_log' AND e.term_id = 167
ORDER BY ID ASC LIMIT 100;
期望:我正在尝试构建一个查询,该查询将查找并删除最旧的 100 个条目。我设置了一个 LIMIT,因为正在处理的条目数量(数百万)会超时查询。
实际结果:据我所知,由于 LIMIT 不适用于多表删除导致的语法错误。
【问题讨论】:
-
这是一个奇怪的要求。你为什么要这样做?
-
@Strawberry 目的是慢慢地从最旧到最新删除这些条目 - 限制是阻止查询超时,因为它与很多人一起工作
-
我不明白。如果您只是要在数据集上“切入”直到它全部消失,为什么不直接放弃表格呢?
-
@Strawberry 在所有被访问的表中都有重要信息,但这些表中也有一些条目是无用的日志,它们正在使数据库膨胀——据我所知,这个查询的目标和删除那些日志条目
-
在这些情况下,通常最好创建新表,只保留您想要保留的信息,然后删除/归档旧表,然后重命名新表。
标签: mysql join sql-delete