Простой запрос на обновление занимает слишком много времени - Postgres - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть таблица с 28 миллионами строк, которые я хочу обновить.В нем около 60 столбцов и столбец идентификатора (первичный ключ) с созданным на нем индексом.Я создал четыре новых столбца и хочу заполнить их данными из четырех столбцов другой таблицы, в которой также есть столбец идентификатора с индексом, созданным на нем.Обе таблицы имеют одинаковое количество строк и только первичный ключ и индекс в столбце IDENTI.Запрос выполняется в течение 15 часов, и, поскольку он является приоритетным, мы начинаем нервничать по этому поводу, и у нас не так много времени, чтобы экспериментировать с запросами.Мы никогда не обновляли такую ​​большую таблицу (7 ГБ), поэтому не уверены, что это нормальное время.

Это запрос:

UPDATE consolidated
SET IDEDUP2=uni.IDEDUP2
USE21=uni.USE21
USE22=uni.USE22
PESOXX2=uni.PESOXX2
FROM uni_group uni, consolidated con
WHERE con.IDENTI=uni.IDENTI

Как мне сделатьэто быстрее?Является ли это возможным?Если нет, есть ли способ проверить, сколько времени это займет (без прерывания процесса)?

Так же, как дополнительная информация, мы выполнили гораздо более сложные запросы для 3 миллионов таблиц строк (postgis).) и это заняло около 15 часов.

1 Ответ

0 голосов
/ 29 ноября 2018

Вы должны не повторить таблицу назначения в предложении FROM.Ваше утверждение создает декартово соединение таблицы consolidated с самим собой, а это не то, что вам нужно.

Вы должны использовать следующее:

UPDATE consolidated con
   SET IDEDUP2=uni.IDEDUP2
       USE21=uni.USE21
       USE22=uni.USE22
       PESOXX2=uni.PESOXX2
FROM uni_group uni
WHERE con.IDENTI = uni.IDENTI
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...