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

Есть такой update:

Код: plsql
1.
2.
update imp.account a
set id = (select account from cbschangetable.extaccount ea where a.extid = ea.externalid)


где
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE TABLE imp.account (
  id NUMERIC(20,0),
  extid NUMERIC(20,0)
) 
WITH (oids = false);
и
CREATE TABLE cbschangetable.extaccount (
  account NUMERIC(20,0),
  externalid NUMERIC(20,0),
  source NUMERIC(20,0)
) 
WITH (oids = false);


в обеих таблицах порядка 3000000 записей. И этот запрос не выполнился за 10 часов. Можно ли его как-то ускорить?
...
Рейтинг: 0 / 0
очень медленный update
    #38976378
chumanoid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот план выполнения:

"Update on imp.account a (cost=0.00..281026146801.68 rows=5134053 width=217)"
" -> Seq Scan on imp.account a (cost=0.00..281026146801.68 rows=5134053 width=217)"
" Output: (SubPlan 1), a.label, a.code, a.description, a.opened, a.closed, a.balancepart, a.balance, a.client, a.currency, a.isactive, a.filial, a.pairaccount, a.sortacc, a.type, a.changedate, a.extcurrency, a.extid, a.isnew, a.isupdate, a.ctid"
" SubPlan 1"
" -> Seq Scan on cbschangetable.extaccount ea (cost=0.00..54737.55 rows=1 width=6)"
" Output: ea.account"
" Filter: (a.extid = ea.externalid)"
...
Рейтинг: 0 / 0
очень медленный update
    #38976384
tadmin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chumanoid,

1. индексы на extid и externalid
2. переписать на update ... from where
...
Рейтинг: 0 / 0
очень медленный update
    #38976410
chumanoid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Индексы тут ни при чём. Так как запрос

Код: plsql
1.
2.
3.
select count(*) from 
imp.account a, cbschangetable.extaccount ea
where a.extid = ea.externalid


выполняется за пару минут. Есть подозрение, что надо в настройках сервера рыться, но не понятно в каких
...
Рейтинг: 0 / 0
очень медленный update
    #38976444
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chumanoidИндексы тут ни при чём. Так как запрос

Код: plsql
1.
2.
3.
select count(*) from 
imp.account a, cbschangetable.extaccount ea
where a.extid = ea.externalid


выполняется за пару минут. Есть подозрение, что надо в настройках сервера рыться, но не понятно в каких

сравните планы
select * from
imp.account a, cbschangetable.extaccount ea
where a.extid = ea.externalid

и

select *,(select account from cbschangetable.extaccount ea where a.extid = ea.externalid)
from imp.account a

Это РАЗНЫЕ для базы запросы... если вы update переделаете на update ... from cbschangetable.extaccount ea where...
то у вас update будет тоже быстрым...

А сейчас у вас 30M seq scan по 30M таблице получается естественно что это до 2го пришествия будет выполнятся.
И настройки сервера тут не причем.

--
Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
очень медленный update
    #38977248
chumanoid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk
Действительно, разница есть. Спасибо.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / очень медленный update
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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