所以我有2张桌子。 {350}行和TableA
的{{1}}只包含TableB
应具有的有效数据。所以我需要清除TableA
中的旧数据。
如果TableA
不是那么大,那么这个查询会很棒。
Table A
所以我需要做的是限制DELETE FROM TableA where MLS NOT IN (SELECT LIST_3 FROM TableB);
中检查的行数。而不是从TableA
检查350K记录,我希望它检查100例如。
我无法弄清楚如何...这不起作用,因为它只限制删除但未检查的行数。它可以检查500行并删除100.我希望它检查100并删除许多不在TableA
。
TableB
答案 0 :(得分:1)
如果TableA
有主键,则可以执行以下操作:
DELETE a
FROM TableA a JOIN
(SELECT a2.id
FROM TableA a2
LIMIT 100 -- should have an order by with limit
) a2
ON a.id = a2.id
WHERE NOT EXISTS (SELECT 1 FROM TableB b WHERE b.List_3 = a.MLS);
注意:
NOT IN
更改为NOT EXISTS
。当存在NULL
值时,后者具有更直观的行为。ORDER BY
与LIMIT
一起使用,但您的原始问题未指定选择 100行的方式。答案 1 :(得分:0)
索引列上的左连接应该相当快地执行删除:
delete a
from TableA a
left join TableB b on a.MLS = b.LIST_3
where b.LIST_3 is null;
SqlFiddle:http://sqlfiddle.com/#!9/2e1e0/1