2014-03-18 5 views
-1

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

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 столбиков) = 1000 ЧСТРОК

  • ПК ПО company_id + COMPANY_REGION_ID

КОМПАНИ (86 столбиков) = 1,84 миллиона строк

  • П.К. ON COMPANY_ID + COMPANY_REGION_ID

BRNCH (117 КОЛОННЫ) = 595

  • PK ON BRANCH_ID

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

+0

Я думаю, что вы, возможно, забыли присоединиться к 'company' и' BRNCH' в 'п USING'. – mustaccio

ответ

2

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

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'; 
+0

Я ужасно ошеломлен. Это сделало разницу в мире и заработало через 5 секунд. Мой ум озадачен. – user3224907

Смежные вопросы