UPDATE OPENQUERY 문의입니다.
UPDATE SSER..PD.T_SIMU
SET IMST_ITEM = (SELECT MIN(AA.IMST_ITEM) FROM SSER..PD.T_SIMD AA WHERE AA.CNT = T_PD_SIMU.SIMU_MADE) ,
MADE_SEQN = (SELECT MIN(AA.MADE_SEQN) FROM SSER..PD.T_SIMD AA WHERE AA.CNT = T_PD_SIMU.SIMU_MADE)
WHERE SIMU_DATE = CONVERT(CHAR(8),GETDATE(),112)
위와같이 링크드서버로 UPDATE를 하니 속도가 많이 걸립니다.
이를 UPDATE OPENQUERY 를 사용하여 수정하려고 하는데
구분이 영 복잡해서요. 고수님들 도움 부탁드립니다.
자세한 구문 부탁드립니다.
UPDATE OPENQUERY(SSERP,'SELECT IMST_ITEM, MADE_SEQN
FROM PDS.T_PD_SIMU
WHERE SIMU_DATE = TO_CHAR(SYSDATE,''YYYYMMDD'')
')
SET MADE_SEQN = ??????
UPDATE OPENQUERY 를 쓰셔도
SET 부분은 동일한 내용이라 큰 차이가 없을듯 하네요..
미리 집계를 내고 조인으로 업데이트 하시면 속도가 빨라 지지 않을까 생각 되구요.
각테이블의 인덱스는 조인된 컬럼으로 잡혀져 있을거구요..
질문하신 쿼리를 바탕으로 아래와 같이 하셔도 될듯 합니다.
WITH RES AS
(
SELECT AA.CNT, MIN(AA.IMST_ITEM) IMST_ITEM , MIN(AA.MADE_SEQN) MADE_SEQN
FROM SSER..PD.T_SIMD AA
GROUP BY AA.CNT
)
UPDATE A
SET A.IMST_ITEM = B.IMST_ITEM
, A.MADE_SEQN = B.MADE_SEQN
FROM SSER..PD.T_SIMU A JOIN RES B ON A.SIMU_MADE = B.CNT
WHERE A.SIMU_DATE = CONVERT(CHAR(8),GETDATE(),112)
빨간색 부분을 아래와 같이 바굴수도 있을듯 하네요..
WITH RES AS
(
SELECT AA.CNT, MIN(AA.IMST_ITEM) IMST_ITEM , MIN(AA.MADE_SEQN) MADE_SEQN
FROM SSER..PD.T_SIMD AA JOIN SSER..PD.T_SIMU BB ON AA.CNT = BB.SIMU_MADE
WHERE BB.SIMU_DATE = CONVERT(CHAR(8),GETDATE(),112)
GROUP BY AA.CNT
)