powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Оптимизация запроса update
9 сообщений из 9, страница 1 из 1
Оптимизация запроса update
    #38783459
SunShine33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем добрый вечер! Прошу помочь с оптимизацией такого запроса:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
UPDATE table1 t1 
SET m_id = t2.m_id
FROM  (SELECT id, ROW_NUMBER() OVER(ORDER BY id) AS m_id FROM table2) AS t2
WHERE t1.id = t2.id
     AND t1.id = t1.n_id
     AND t1.n_id = t1.p_id; 

/*  Таблица table2 создается таким образом:   */

create table table2 as select * from table1 t1 where t1.id = t1.n_id AND t1.n_id = t1.p_id;



В таблицу table1 порядка 30 млн записей, в таблице table2 - 10 млн, добавлены индексы по колонкам id, m_id, p_id .
Если применять запрос на небольшом количестве данных, то отрабатывает довольно быстро,
но на реальных данных очень долго - часы, может можно здесь придумать что-то более оптимальное?
...
Рейтинг: 0 / 0
Оптимизация запроса update
    #38783468
Гость_0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SunShine33,

покажите explain
...
Рейтинг: 0 / 0
Оптимизация запроса update
    #38783494
SunShine33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гость_0,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
"Update on table1 t1  (cost=96646.33..102439.93 rows=5 width=3888)"
"  ->  Merge Join  (cost=96646.33..102439.93 rows=5 width=3888)"
"        Merge Cond: (t2.id = t1.id)"
"        ->  Subquery Scan on t2  (cost=24156.67..29467.31 rows=193114 width=56)"
"              ->  WindowAgg  (cost=24156.67..27536.17 rows=193114 width=8)"
"                    ->  Sort  (cost=24156.67..24639.46 rows=193114 width=8)"
"                          Sort Key: table2.id"
"                          ->  Seq Scan on table2  (cost=0.00..7202.14 rows=193114 width=8)"
"        ->  Sort  (cost=72489.66..72489.73 rows=26 width=3840)"
"              Sort Key: c.id"
"              ->  Seq Scan on table1 t1  (cost=0.00..72489.05 rows=26 width=3840)"
"                    Filter: ((id = n_id) AND (n_id = p_id))"
...
Рейтинг: 0 / 0
Оптимизация запроса update
    #38783911
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача "устранения дырок в нумерации" - не кошерная. Не нужно её решать, пересмотрите архитектуру.
...
Рейтинг: 0 / 0
Оптимизация запроса update
    #38784264
SunShine33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LeXa NalBat, это не задача "устранения дырок в нумерации", требуется пронумеровать по порядку строки, которые соответствуют определенному условию, чтобы в дальнейшем использовать эти номера.
...
Рейтинг: 0 / 0
Оптимизация запроса update
    #38784424
Лопата
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SunShine33Гость_0,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
"Update on table1 t1  (cost=96646.33..102439.93 rows=5 width=3888)"
"  ->  Merge Join  (cost=96646.33..102439.93 rows=5 width=3888)"
"        Merge Cond: (t2.id = t1.id)"
"        ->  Subquery Scan on t2  (cost=24156.67..29467.31 rows=193114 width=56)"
"              ->  WindowAgg  (cost=24156.67..27536.17 rows=193114 width=8)"
"                    ->  Sort  (cost=24156.67..24639.46 rows=193114 width=8)"
"                          Sort Key: table2.id"
"                          ->  Seq Scan on table2  (cost=0.00..7202.14 rows=193114 width=8)"
"        ->  Sort  (cost=72489.66..72489.73 rows=26 width=3840)"
"              Sort Key: c.id"
"              ->  Seq Scan on table1 t1  (cost=0.00..72489.05 rows=26 width=3840)"
"                    Filter: ((id = n_id) AND (n_id = p_id))"



могабыть ANALYZE как-то сделать и еше раз планчик показать.
...
Рейтинг: 0 / 0
Оптимизация запроса update
    #38784427
Alexius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SunShine33,

можно попробовать work_mem какой-нибудь дикий выкрутить для этого запроса.
не уверен правда что сильно поможет, без explain analyze непонятно.
...
Рейтинг: 0 / 0
Оптимизация запроса update
    #38784437
V&N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
V&N
Гость
SunShine33, если операция одноразовая
copy (select row_number ... from table1 join table2 ...) to '/tmp/file_name';
truncate table table1;
copy table1 from '/tmp/file_name';
...
Рейтинг: 0 / 0
Оптимизация запроса update
    #38784772
SunShine33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ответы! Результат explain analyze:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
"Update on table1 t1  (cost=96646.33..102439.93 rows=5 width=3888) (actual time=58681.250..58681.250 rows=0 loops=1)"
"  ->  Merge Join  (cost=96646.33..102439.93 rows=5 width=3888) (actual time=39765.005..41235.066 rows=193114 loops=1)"
"        Merge Cond: (t2.id = t1.id)"
"        ->  Subquery Scan on t2  (cost=24156.67..29467.31 rows=193114 width=56) (actual time=1987.114..2739.994 rows=193114 loops=1)"
"              ->  WindowAgg  (cost=24156.67..27536.17 rows=193114 width=8) (actual time=1987.105..2443.660 rows=193114 loops=1)"
"                    ->  Sort  (cost=24156.67..24639.46 rows=193114 width=8) (actual time=1987.094..2119.127 rows=193114 loops=1)"
"                          Sort Key: table2.id"
"                          Sort Method: quicksort  Memory: 15197kB"
"                          ->  Seq Scan on table2  (cost=0.00..7202.14 rows=193114 width=8) (actual time=9.425..1722.713 rows=193114 loops=1)"
"        ->  Sort  (cost=72489.66..72489.73 rows=26 width=3840) (actual time=37777.880..37908.536 rows=193114 loops=1)"
"              Sort Key: t1.id"
"              Sort Method: quicksort  Memory: 58348kB"
"              ->  Seq Scan on table1 t1  (cost=0.00..72489.05 rows=26 width=3840) (actual time=35.145..37262.101 rows=193114 loops=1)"
"                    Filter: ((id = n_id) AND (n_id = p_id))"
"Total runtime: 58682.103 ms"



V&N, операция одноразовая, попробую таким способом, спасибо большое!
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Оптимизация запроса update
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]