【发布时间】:2020-09-16 09:41:14
【问题描述】:
所以,我有两个表,用户和积分。很多用户不再有积分(字面意思和表格)——所以我希望删除它们。我尝试通过这样做来实现这一点,但它基本上会超时(两个表中大约有十万行)。我正在选择而不是删除,因为我想在发出与删除相同的查询之前验证数据:
SELECT WWW t1
FROM users t1
JOIN points t2 ON t1.id != t2.user_id;
两个表都有一个相互匹配的 ID。如果用户有一个点,就会有一个匹配的 ID。如果该用户不再有积分,则没有匹配的 ID。因此,!=理论上应该删除所有不再需要的用户。
如何在不使数据库超时的情况下做到这一点?
【问题讨论】:
-
这能回答你的问题吗? Delete with Join in MySQL
-
只需添加一个 WHERE t2.points = 0 或类似于上面链接中的连接删除查询
-
分块执行以避免超时和锁定:mysql.rjweb.org/doc.php/deletebig
标签: mysql sql join query-optimization sql-delete