作为一项任务,我需要清理一个电影数据库。
部分用户已被删除,我必须从不再在数据库中的用户中删除评级。
我做了这个查询
DELETE rating FROM rating LEFT JOIN (SELECT id FROM user) as A ON A.id = rating.userId WHERE A.id IS NULL;
我在rating.userId和user.Id
上制作了索引由于有6000个用户和1.000.000评级,这需要很长时间。任何人都可以弄清楚我如何能够以更好的性能执行此操作或这样的查询?
答案 0 :(得分:7)
删除不必要的子选择
DELETE rating
FROM rating
LEFT JOIN user ON user.id = rating.userId
WHERE user.id IS NULL
答案 1 :(得分:0)
运行此SELECT
查询并确认这些是您要删除的行。
SELECT * FROM rating WHERE UserId NOT IN (SELECT Id FROM user);
如果匹配,您只需运行这样的查询。
DELETE FROM rating WHERE UserId NOT IN (SELECT Id FROM user);