У меня есть две таблицы
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;
Есть ли более быстрый способ сделать такое обновление в базе данных?Или, может быть, какое-то другое решение?
Заранее спасибо за любые предложения.