[sql][PostgreSQL] Запрос из двух таблиц с исключением

sveta75

Задача в принципе аналогичная этой . Нужно из одной таблицы взять данные отсутвующие во второй и положить в эту вторую. Т.е. что то типа

INSERT INTO b (SELECT * FROM a WHERE a.id != b.id)

или

INSERT INTO b (SELECT * FROM a WHERE a.id NOT IN (b.id


Вся проблема в том что в одной таблице примерно 55 000 записей, а в другой примерно 105 000. Т.е. приведенный выше запрос будет выполнятся довольно долго

ahiles27

это разве долго?

sveta75

Я так и не дождался пока он выполнится. Посгрес отожрал все свободное место на винте и отрубился. Собственно и не удивительно. Наверняка при таком запросе должно произойти не менее 5 000 000 000 сравнений (50 000 * 100 000)

Dasar

индекс по полю id построен?

Dasar

Первый запрос точно не правильный. После его исполнения в таблице b будет 50000 * 100000 (~5 миллионов) записей (т.е. даже не сравнений, а именно записей)
понятно, что база сдохла.
Насчет второго - не уверен.
Корректнее будет:


INSERT INTO b (SELECT * FROM a WHERE a.id NOT IN (select id from b

sveta75

Да, индекс есть и примари кей стоит.
Скорее всего я в php отберу нужные записи, так как эта синхронизация будет производится не чаще чем раз в неделю.

Dasar

а правильный запрос попробовал?
Оставить комментарий
Имя или ник:
Комментарий: