많은 수의 데이터를 반복문으로 UPDATE 할 때 빠르게 하는 방법이 있을까요? 0 6 1,581

by 뉴비 [SQL Query] MSSQL 쿼리 [2023.05.22 15:34:53]


테이블 구조.PNG (34,562Bytes)

안녕하세요.

첨부한 파일(변경할 데이터.PNG)처럼 측정값과 수정값이 서로 다를 경우 해당 로우의 시간과 수정값의 셀의 데이터를 쿼리문에 넣어서 반복문으로 UPDATE 하고 있습니다.

UPDATE tableName SET c04 = '31', c06 = 0 Where Convert(varchar(20), c02, 120) = '2023-04-30 13:57:59' and c01 = 3315

UPDATE tableName SET c04 = '64.1', c06 = 0 Where Convert(varchar(20), c02, 120) = '2023-04-30 13:56:59' and c01 = 3315

이런식으로 반복문마다 c04에 들어가는 값과 where절의 시간과 c01이 달라집니다.

(조회 조건은 시간(c02)과  ID(c01)입니다, c04는 수정값으로 수정해주고 c06은 항상 0으로 들어갑니다.)

문제는 수정할 데이터의 Row수만큼 반복문을 돌려서 업데이트 하기 때문에 데이터가 1000개만 넘어가도 UPDATE 시간이 1분이상 걸립니다.

몇 만개 이상의 데이터를 UPDATE 해줘야 하는데 빠르게 UPDATE 할 방법이 있을까요??

by 마농 [2023.05.22 15:42:20]

컬럼을 가공하여 비교하지 마세요. 조건을 가공하세요.
- 개선전 : Convert(varchar(20), c02, 120) = '2023-04-30 13:57:59'
- 개선후 : c02 = Convert(datetime, '2023-04-30 13:57:59', 120)


by 뉴비 [2023.05.22 16:37:45]

속도가 9~10배정도 빨라졌습니다 정말 감사합니다 ㅠㅠ


by 마농 [2023.05.22 16:11:38]

반복 update 개선 방향
1. bulk update / batch update
2. temp table 입력 후 join update


by 뉴비 [2023.05.22 16:40:35]

이 방법도 시도 해보겠습니다 감사합니다!


by 뉴비 [2023.05.22 17:17:06]

temp table 입력 후 join update 하라는 말씀이 MSSQL에 temp table을 만들고 변경된 데이터를 bulk insert 후 기존 테이블과 temp table을 join update 하라는 말씀이신가요??


by 마농 [2023.05.22 17:20:03]

네. 맞습니다.
임시테이블에 bulk insert 하고 임시테이블을 이용해 join update

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