SQL比较2个表的差异需要很长时间

时间:2018-05-02 18:48:48

标签: mysql sql

我有2个表,每个表有约900k记录,需要检查其中一个表是否缺少某些记录。我在网上尝试了很多建议,包括这个:

SELECT tableB.ColumnOfInterest, tableB.City, tableB.Province 
FROM tableB 
WHERE tableB.ColumnOfInterest NOT IN (SELECT TableA.ColumnOfInterest 
                                      FROM TableA)

然而,查询似乎挂了。 5分钟后,它仍然在查询。

有没有办法更快地完成这种比较/差异检测?

3 个答案:

答案 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)