안녕하세요
MS-SQL 초보 개발자입니다.
나라가 어지럽고 -_-;) 날씨가 많이 무더워져서 개발하는데 고생하십니다.
커서를 이용해서 여러 테이블에 있는 데이터를 하나에 테이블에 백업하려고하는데 속도가 안나와서 문의드립니다.
--------------------- 쿼리 문 ---------------------
INSERT INTO 백업테이블_0514
SELECT 컬럼A, 컬럼B, 컬럼C, 컬럼D, 컬럼E, 컬럼F, 컬럼G, 컬럼H, 컬럼I, -- A테이블
컬럼J, 컬럼K, 컬럼L, 컬럼M, 컬럼N, 컬럼O, 컬럼P, 컬럼Q, 컬럼R, 컬럼S -- B테이블
FROM 테이블A A
LEFT OUTER JOIN
(
SELECT 컬럼J, 컬럼K, 컬럼L, 컬럼M, 컬럼N, 컬럼O, 컬럼P, 컬럼Q, 컬럼R, 컬럼S
FROM 테이블B WITH (NOLOCK)
WHERE 컬럼J = 'AAA'
AND 컬럼K >= CAST('2008-06-02 10:18:00' AS DATETIME)
) O
ON (컬럼A + 컬럼B + CAST(컬럼C AS VARCHAR)) = 컬럼L+ SUBSTRING(컬럼M,2,4)+SUBSTRING(컬럼N,8,7)+CAST(컬럼O AS VARCHAR)
WHERE 컬럼C = 'CCC'
AND 컬럼D < 1000
AND 컬럼E >= CAST('2008-06-02 10:18:00' AS DATETIME)
AND 컬럼E < CAST('2008-06-02 20:18:00' AS DATETIME)
-- 테이블A 데이터개수 : 약 20만개
-- 테이블B 데이터개수 : 약 6천개
-- B테이블에 있는 데이터가 A테이블에도 있으면 백업 테이블에 INSERT (B테이블 약 400개)
-- 조인해서 백업테이블에 넣어지는 데이터개수 : 약 500개
------------------------------------------------------
위와같은 쿼리를 커서를 사용해서 약 400개의 테이블의 데이터를 백업테이블에 모아 두는 SP를 만드는데요.
400번을 돌아가서 백업 테입블에 INSERT 되는 시간이 대략 3분 정도 소요됩니다. (20초 안으로 속도 개선해아함 ㅜㅜ)
인덱스문제인지? 쿼리 방법이 틀린건지? 커서를 사용하면 안되는건지? 다른 방법이 있는지?
바쁘시지만 고수님의 조언 부탁드립니다. _ _)
|