Долгосрочное выражение MERGE

У меня есть следующее выражение MERGE, которое занимает очень много времени (около 20-30 минут). Среда - это DB2 9.7 на LINUX. В базе данных нет других запросов, поскольку это среда dev.

MERGE INTO TEST.COMPANY cc
USING(SELECT c.COMPANY_ID COMPANY_ID, b.COUNTRY_ID COUNTRY_ID FROM COMPANY c, BRNCH b WHERE b.branch_id IN (SELECT c.branch_id FROM COMPANY c)) a
ON(cc.COMPANY_ID=a.COMPANY_ID)
WHEN MATCHED AND a.COUNTRY_ID=11000 THEN
UPDATE SET cc.CTRY='US'
WHEN MATCHED AND a.COUNTRY_ID=11001 THEN
UPDATE SET cc.CTRY='CA';

TEST.COMPANY(86 COLUMNS) = 1000 ROWS

  • PK ON COMPANY_ID + COMPANY_REGION_ID

КОМПАНИЯ (86 КОЛОНК) = 1,84 МЛН.

  • PK ON COMPANY_ID + COMPANY_REGION_ID

BRNCH (117 COLUMNS) = 595

  • PK ON BRANCH_ID

Это выполнило 12 минут. Я был бы признателен за любую помощь по настройке sql на этом. Надеюсь, я предоставил достаточно информации.

1 ответ

Попробуй это :-

MERGE INTO TEST.COMPANY cc
USING(SELECT c.COMPANY_ID COMPANY_ID, b.COUNTRY_ID COUNTRY_ID FROM COMPANY c INNER JOIN BRNCH b ON b.branch_id = c.branch_id) a
ON(cc.COMPANY_ID=a.COMPANY_ID)
WHEN MATCHED AND a.COUNTRY_ID=11000 THEN
UPDATE SET cc.CTRY='US'
WHEN MATCHED AND a.COUNTRY_ID=11001 THEN
UPDATE SET cc.CTRY='CA';

licensed under cc by-sa 3.0 with attribution.