所以,我有两个表,用户和点。很多用户不再有点(字面上和表)--所以我想删除他们。我尝试通过这样做来实现这一点,但它基本上超时(两个表中都有大约十万行)。我正在执行select而不是delete,因为我希望在发出与delete相同的查询之前验证数据:
SELECT WWW t1
FROM users t1
JOIN points t2 ON t1.id != t2.user_id;
两个表都有一个相互匹配的id。如果用户有一个点,则会有一个匹配的id。如果该用户不再有点,则不会有匹配的id。因此,!=理论上应该删除所有不再需要的用户。
我如何做到这一点而不超时我的数据库?
1条答案
按热度按时间szqfcxe21#
我建议你
not exists
:如果您有合适的索引,这应该是一个有效的选择,即:
points(user_id)
.另一方面,如果要删除表的很大一部分,则将要保留的行移动到临时表中,然后截断并重新创建表可能更简单: