СОЮЗ для объединения таблиц имеет высокую стоимость, теряет связь с сервером - PullRequest
0 голосов
/ 14 февраля 2020

Я пытаюсь создать новую таблицу как UNION из всех строк двух существующих таблиц с одинаковыми столбцами:

CREATE TABLE table3 AS
(SELECT * from table1
UNION
SELECT * from table2);

Через некоторое время я получаю «Соединение с сервером» был потерян. " Запуск EXPLAIN, операция имеет довольно высокую стоимость:

Unique  (cost=51951688.65..57110689.45 rows=257950040 width=36)
  ->  Sort  (cost=51951688.65..52596563.75 rows=257950040 width=36)
        Sort Key: table1.id, table1.stid, table1.e5, table1.e10, table1.diesel, table1.date, table1.changed
        ->  Append  (cost=0.00..8859500.00 rows=257950040 width=36)
              ->  Seq Scan on gas_prices  (cost=0.00..1282341.56 rows=66285256 width=36)
              ->  Seq Scan on gas_prices_1620  (cost=0.00..3707907.84 rows=191664784 width=36)
JIT:
  Functions: 1
  Options: Inlining true, Optimization true, Expressions true, Deforming true

Так что сортировка требует много ресурсов. Я установил параметры памяти в postgresql .conf выше, чем по умолчанию, но я работаю только в системе с 16 ГБ памяти. Я подозреваю, что реиндексация существующих таблиц может помочь, однако я не уверен, какой индекс сделать. Ни в одной из таблиц нет закрытого ключа: ни один, ни комбинация столбцов не являются уникальными (за исключением всех столбцов одновременно).

Как заставить запрос работать? Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 14 февраля 2020

Используйте UNION ALL вместо UNION.

С уважением,
Bjarni

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