SQL Сравнение 2 таблиц для различий занимает много времени - PullRequest
0 голосов
/ 02 мая 2018

У меня есть 2 таблицы с ~ 900 тыс. Записей в каждой, и мне нужно проверить, не пропущены ли в одной из таблиц некоторые записи. Я попытался найти множество предложений, найденных в Интернете, включая этот:

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

однако запрос кажется зависшим. 5 минут спустя, и он все еще запрашивает.

Есть ли способ ускорить обнаружение сравнения / различия?

Ответы [ 3 ]

0 голосов
/ 02 мая 2018

Используйте левое соединение вместо подзапроса «не в» для увеличения производительности

 SELECT a.ColumnOfInterest , a.City, a.Province 
    FROM tableB a
    left join TableA b on a.ColumnOfInterest =b.ColumnOfInterest 
    where b.ColumnOfInterest is null
0 голосов
/ 03 мая 2018

Как уже упоминалось здесь нет существенной разницы между решением, использующим not in и left join + not null. Основной проблемой в вашем случае может быть отсутствие следующих индексов:

Create index ix_tb_col on tableB(ColumnOfInterest)

Create index ix_ta_col on tableA(ColumnOfInterest)
0 голосов
/ 02 мая 2018

Используйте not exists вместо

SELECT ColumnName, City, Province 
FROM tableB b
WHERE NOT EXISTS (SELECT 1 FROM TableA WHERE ColumnName = b.ColumnName);

Однако этот индекс хочет на tableB(ColumnName) / TableA(ColumnName)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...