DB
대용량 데이터 UPDATE하기(MS-SQL)
이안_ian
2019. 11. 11. 14:01
반응형
소량의 데이터를 칠 경우 그냥 UPDATE를 하면 되겠지만 데이터가 1만, 10만건이 되었을 경우 한 트랜젝션에 그 많은 작업을 물리기엔 시간이 너무 오래 소요된다. 그래서 이렇게 대량의 데이터를 UPDATE할 경우 100건이나 1000건씩 나눠서 트랜잭션을 쪼개는게 더 효율적이다.
이 방법은 프로시저를 이용하여 while문을 쓸 것이다.
DECLARE @WHERE_STR VARCHAR(1000);
SELECT @WHERE_STR = SELECT_NAME FROM A WHERE FORM_TYPE = 'TEST'
WHILE 1=1
BEGIN
UPDATE TOP(1000) TARGET_TABLE
SET SELECT_CD = 'CHANGE TXT '
WHERE SELECT_CD = @WHERE_STR
IF @@ROWCOUNT < 1000
BREAK;
WAITFOR DELAY '00:00:00.020'
END
처음 2줄은 사실 없어도 될 부분이지만 필자의 경우 긴 문자열을 사용하다보니 값이 잘 먹지 않아서 저런식으로 변수에 해당 값을 담아 사용했다.
다시 while로 들어와서 먼저 1=1 이라는 무한 루프를 만들고 타켓테이블의 1000번까지의 데이터를 불러 오는데 where조건에 맞는 데이터를 불러온다. 그리고 그 값을 CHANGE TXT 로 바꾸고 나면 트랜잭션을 쪼개기 위해 DELAY를 0.02초를 줘서 잠깐의 틈을 만들어준다. 그리고 1000개씩 불러오는데 @@ROWCOUNT로 반영된 ROW를 읽어 들여서 1000개 이하면(3200 - 3000 = 200 이러면 마지막까지 다 변경된 것) 변경할 데이터가 더 없으니 탈출을 하는 구문이다.
아직 변경할 데이터가 남았다면 WHERE조건으로 변경된 데이터를 제외한, 다시 위에서 1000개의 데이터를 불러와 위와 같은 행동을 반복한다.
반응형