안녕하세요...
업데이트 실행시 수행시간차이가 너무 많이 나는 이유가 궁금합니다.
혹시 VIEW가 아닌 TABLE 로 하면 빨라 질까요???
1.
UPDATE TMP_GENTRDTD_COMP
SET TRDFLAG = '0'
WHERE TRDGDT = '20170329'
AND TRDNUM IN (
SELECT TRDNUM FROM V_GENTRDTD_COMP
)
2.
UPDATE TMP_GENTRDTD_COMP
SET TRDFLAG = '0'
WHERE TRDGDT = '20170329'
AND TRDNUM IN (
5889, 12445, ...... (약 5000여 개)
)
위, 1번 쿼리의 VIEW "V_GENTRDTD_COMP" DATA가 5000 여개가 있습니다.
2번으로 실행하면 약 7초정도 시간이 걸리는데..
1번으로 실행하면(VIEW의 값으로 조회해서) 끝나지 않네요;;;
우선, 급한대로.. 2번을 6번 수행해서 업데이트는 했습니다.
3. VIEW 생성 쿼리
CREATE OR REPLACE VIEW V_GENTRDTD_COMP AS
SELECT TRDNUM FROM
( SELECT TRDNUM
FROM V_GENTRDTD_COMP_20170329 -- "원장 TABLE 에서 3월29일자 DATA" VIEW .
MINUS
SELECT TRDNUM
FROM GENTRDTD_COMP_20170329 -- "외부에서 받은 DATA 를 SQL LOADER로 INSERT한 TABLE"
)
감사합니다...
두 쿼리가 뷰를 사용했냐 아니냐 차이니 문제는 뷰에 있다고 봐야겠죠?
정확한 건 실행계획을 보아야 알겠지만 뷰에서 사용한 minus 연산 보다는 아무래도 not exists가 나을 것 같네요.
CREATE OR REPLACE VIEW V_GENTRDTD_COMP AS SELECT TRDNUM FROM V_GENTRDTD_COMP_20170329 A WHERE NOT EXISTS (SELECT 1 FROM GENTRDTD_COMP_20170329 B WHERE B.TRDNUM = A.TRDNUM)
trdnum에 인덱스가 있는지도 보시고요.