Postgres группа по обновлению - медленный запрос - PullRequest
0 голосов
/ 20 декабря 2011

Я использую Postgres 9.X. У меня есть две таблицы

Table A
(
id integer
);

Table B
(
id integer,
Value integer
);

Обе таблицы индексируются по id.

Таблица A может иметь повторяющиеся идентификаторы

Example:
Table A
ID
1
1
1
2
1

Я намереваюсь вставить количество вхождений идентификатора в таблицу B (в этой таблице есть все идентификаторы из таблицы A, но изначально значение равно 0)

Table B
ID       Value
1         4
2         1
3         0
4         0

Вот мой SQL-оператор

update tableB set value = value + sq.total
from
( select id, count(*) as total from TableA group by id ) as sq
where sq.id = tableB.id;

С 3-10 миллионами записей в Таблице A это занимает очень много времени. Есть ли способ оптимизировать этот запрос?

1 Ответ

1 голос
/ 20 декабря 2011

Вам нужно tableB для первоначального заполнения?INSERT...SELECT из tableA в пустое tableB (без индексов на tableB) должно быть быстрее:

insert into tableb (id, value)
select id, count(*)
from tablea
group by id

, а затем добавить ваши индексы в tableB, как только будут получены данные.

...