Самый быстрый способ условно обновить колонку в Postgres - PullRequest
0 голосов
/ 24 мая 2018

У меня есть две таблицы

create table A(id text, data text, has_b boolean default false);

create table B(id text, a_id text, data text);

Нет первичных ключей, нет индексов.Поле a_id из table B будет соответствовать id из table A.

Я хочу установить для поля has_b значение true, если ссылка A.id указана в B.a_id.Это однократное обновление после создания базы данных и вставки всех данных, поэтому я могу при необходимости выполнять любые манипуляции с базой данных.

В настоящее время я использую следующую инструкцию обновления, но она слишком медленная (у меня более500 млн записей для обновления).

UPDATE A SET has_b = TRUE
WHERE EXISTS (SELECT 1 FROM B WHERE a_id = A.id limit 1);

Я тоже пробовал эту, но с похожим эффектом:

UPDATE A SET has_B = TRUE FROM B WHERE a_id = A.id;

Есть ли более быстрый способ сделать такое обновление в базе данных?Или, может быть, какое-то другое решение?

Заранее спасибо за любые предложения.

...