我有2个表,每个表有约900k记录,需要检查其中一个表是否缺少某些记录。我在网上尝试了很多建议,包括这个:
SELECT tableB.ColumnOfInterest, tableB.City, tableB.Province
FROM tableB
WHERE tableB.ColumnOfInterest NOT IN (SELECT TableA.ColumnOfInterest
FROM TableA)
然而,查询似乎挂了。 5分钟后,它仍然在查询。
有没有办法更快地完成这种比较/差异检测?
答案 0 :(得分:3)
使用左连接而不是'不在'子查询以提高性能
SELECT a.ColumnOfInterest , a.City, a.Province
FROM tableB a
left join TableA b on a.ColumnOfInterest =b.ColumnOfInterest
where b.ColumnOfInterest is null
答案 1 :(得分:0)
使用not exists
代替
SELECT ColumnName, City, Province
FROM tableB b
WHERE NOT EXISTS (SELECT 1 FROM TableA WHERE ColumnName = b.ColumnName);
但是,这需要tableB(ColumnName)
/ TableA(ColumnName)
答案 2 :(得分:0)
正如前面提到的here,使用not in和left join + not null的解决方案之间没有显着差异。您的案例中的主要问题可能是缺少以下索引:
Create index ix_tb_col on tableB(ColumnOfInterest)
Create index ix_ta_col on tableA(ColumnOfInterest)