Я пытаюсь получить разницу между двумя почти идентичными таблицами в postgresql. Текущий запрос, который я выполняю, выглядит следующим образом:
SELECT * FROM tableA EXCEPT SELECT * FROM tableB;
и
SELECT * FROM tableB EXCEPT SELECT * FROM tableA;
Выполнение каждого из вышеуказанных запросов занимает около 2 минут (это большая таблица).
Я хотел объединить два запроса в надежде сэкономить время, поэтому я пробовал:
SELECT * FROM tableA EXCEPT SELECT * FROM tableB
UNION
SELECT * FROM tableB EXCEPT SELECT * FROM tableA;
И пока работает, запускается минут 20 !!! Я предполагаю, что это займет самое большее 4 минуты, количество времени для выполнения каждого запроса индивидуально.
Есть ли какая-то дополнительная работа, которую выполняет UNION, которая заставляет ее так долго? Или есть способ ускорить это (с UNION или без него)?
ОБНОВЛЕНИЕ: выполнение запроса с UNION ALL занимает 15 минут,почти в 4 раза дольше, чем запуск каждого из них по отдельности. Правильно ли я говорю, что UNION (all) вообще не ускорит это?