Postgresql UNION занимает в 10 раз больше времени, чем выполнение отдельных запросов

Я пытаюсь получить разницу между двумя почти идентичными таблицами в 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) вообще не ускорит это?

8
задан lanrat 14 June 2011 в 01:05
поделиться