2014-03-18 63 views
-1

我有以下MERGE語句花費很長時間(大約20-30分鐘)。環境是LINUX上的DB2 9.7。數據庫上沒有其他查詢,因爲它是開發環境。長時間運行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個COLUMNS)= 1000行

  • PK ON COMPANY_ID + COMPANY_REGION_ID

COMPANY(86個COLUMNS)= 1.84百萬行

  • PK ON COMPANY_ID + COMPANY_REGION_ID

BRNCH(117個COLUMNS)= 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