DB2 join update 문의 0 6 5,126

by 깡냉E [DB 기타] DB2 join update [2016.11.30 23:03:08]


UPDATE A
SET
A.CD1 = B.CD1
,A.CD2 = B.CD2
,A.CD3 = B.CD3
FROM TABLE1 A
INNER JOIN TABLE2 B
ON A.SUB_ID = B.SUB_ID
WHERE A.CD1 = 'AAA'
AND A.CD2 = 'BBB'
AND A.CD3 = 'CCC'
AND A.DATE >= '20160101000000';

 

우선 데이터베이스는 DB2입니다.

TABLE1의 CD1 = 'AAA', CD2 = 'BBB', CD3 = 'CCC'인 컬럼 값을

TABLE2의 CD1, CD2, CD3 컬럼 값으로 UPDATE 하고 싶습니다.

근데 문제는 TABLE1과 TABLE2의 데이터 건수가 각각 천만건 가까이 됩니다.

상기 쿼리로 돌렸을 경우, 이슈가 발생할 가능성이 있나요?

시간이 너무 오래 걸린다면, 어떤 방법으로 UPDATE를 해야 할까요?

도움 좀 부탁드립니다.

감사합니다.

by 마농 [2016.12.01 09:22:56]

전체 건수가 천만건인가요?
업데이트 대상건수가 많지 않다면?
적절한 인덱스만 있으면 문제될 것 없습니다.


by 깡냉E [2016.12.01 09:56:11]

마농님, 우선 답변 감사드립니다.

TABLE1과 TABLE2의 전체 데이터 건수가 각각 천만건 정도이고,

실제 업데이트 되어야 하는 데이터 건수는 1,000건 정도 됩니다.

적절한 인덱스가 없을 경우는 다른 방법으로 UPDATE문을 작성해야 할까요?

예를 들면 WITH절을 이용한다던가...

조언 부탁드립니다.

감사합니다.


by 마농 [2016.12.01 10:06:20]

적절한 인덱스가 없으면 안되죠.


by 깡냉E [2016.12.01 10:33:35]

마농 // 확인해 보니, A.SUB_ID 컬럼에는 인덱스가 설정되어 있는데...

B.SUB_ID 컬럼에는 인덱스가 설정되어 있지 않네요.

이럴 경우, B.SUB_ID 컬럼에도 인덱스를 설정하면 문제 없을 거라고 이해하면 될까요?


by 마농 [2016.12.01 10:44:02]

업데이트 대상을 검색하는 조건에 대한 인덱스
  - table1 a(cd1, cd2, cd3, date)    -- 기본
  - table1 a(cd1, cd2, cd3, date, sub_id)    -- 확장
참조 대상을 조인할 때 필요한 인덱스
  - table2 b(sub_id)    -- 기본
  - table2 b(sub_id, cd1, cd2, cd3)    -- 확장


위에 적은 기본은 반드시 있어야 하는 것이고
위 업데이트 문에서는 확장을 쓰면 더 좋긴 합니다만.
다른데서 사용되는 여러 쿼리들에 미치는 영향도나
인덱스 사이즈 증가에 따른 문재점 등을 고려하여 검토해야 합니다.
사실 천만건 테이블에 인덱스 거는 작업도 만만치 않은 작업입니다.


by 깡냉E [2016.12.01 16:46:03]

마농님, 친절하고 자세한 답변 감사드립니다~! ^^;

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입