Как я могу ускорить выполнение запроса PostgreSQL UPDATE FROM sql ниже? В настоящее время требуется несколько дней для завершения sh выполнения.
UPDATE import_parts ip
SET part_part_id = pp.id
FROM parts.part_parts pp
WHERE pp.upc = ip.upc
AND (ip.status is null or ip.status != '6');
И почему для запуска требуются дни?
В большинстве случаев я вручную завершаю запрос, потому что бегать нужно слишком долго, как более 24 часов. Последний раз, когда он успешно завершил работу, это заняло почти 38 часов.
import_parts
таблица имеет 971971
строк
parts.part_parts
таблица имеет 2196357
строк
* Таблица 1016 * имеет индекс на upc
, а id
является первичным ключом таблицы.
Я уже пробовал запустить VACUUM ANALYZE
на import_parts
таблице и parts.part_parts
таблице перед запросом обновления выше выполняется, но запрос по-прежнему выполняется слишком долго, поэтому я вручную отключил его через 30 минут. Я надеюсь, что смогу выполнить запрос менее чем за 30 минут.
Вот результат EXPLAIN, когда я запускаю запрос после выполнения VACUUM ANALYZE
в import_parts
таблице и parts.part_parts
таблице:
UPDATE 1:
I also tried setting enable_nestloop
to off: SET enable_nestloop TO off
But the query still takes too long to run so I manually killed it. Here's the result of EXPLAIN
when enable_nestloop is turned off:
UPDATE 2:
Here's the result of EXPLAIN when using the query suggested by Abelisto on his answer to this post:
результат Explain с использованием предложенного запроса Abelisto
Но когда я действительно запускаю запрос, я сталкиваюсь с этой ошибкой:
ERROR: more than one row returned by a subquery used as an expression
Я все еще пытаюсь исправить ошибку .