Ускорьте тяжелый запрос UPDATE..FROM..WHERE PostgreSQL - PullRequest
0 голосов
/ 30 марта 2020

У меня есть 2 большие таблицы

CREATE TABLE "public"."linkages" (
        "supplierid" integer NOT NULL,
        "articlenumber" character varying(32) NOT NULL,
        "article_id" integer,
        "vehicle_id" integer
);
CREATE INDEX "__linkages_datasupplierarticlenumber" ON "public"."__linkages" USING btree ("datasupplierarticlenumber");

CREATE INDEX "__linkages_supplierid" ON "public"."__linkages" USING btree ("supplierid");

с 215 000 000 записей и

CREATE TABLE "public"."article" (
    "id" integer DEFAULT nextval('tecdoc_article_id_seq') NOT NULL,
    "part_number" character varying(32),
    "supplier_id" integer,
    CONSTRAINT "tecdoc_article_part_number_supplier_id" UNIQUE ("part_number", "supplier_id")
) WITH (oids = false);

с 5 500 000 записей.

Мне нужно обновить связи .article_id в соответствии с article.part_number и article.supplier_id, вот так:

UPDATE linkages
SET article_id = article.id
FROM
article
WHERE
linkages.supplierid = article.supplier_id AND 
linkages.articlenumber = article.part_number;

Но это слишком тяжело. Я попробовал это, но он обработал за день без результата. Поэтому я прекратил его.

Мне нужно сделать это обновление только один раз, чтобы нормализовать структуру данных для использования внешних ключей в Django ORM. Как я могу решить эту проблему?

Большое спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...