mem 테이블
seq
|
jumin
|
carnum
|
1
|
1
|
가1
|
2
|
2
|
가2
|
3
|
3
|
가3
|
4
|
4
|
가4
|
5
|
5
|
가5
|
6
|
1
|
가6
|
7
|
2
|
가2
|
8
|
3
|
가3
|
9
|
4
|
가4
|
10
|
5
|
가10
|
acct 테이블
seq
|
acct_no
|
use_yn
|
jumin
|
carnum
|
1
|
a1
|
n
|
|
|
2
|
a2
|
n
|
|
|
3
|
a3
|
n
|
|
|
4
|
a4
|
n
|
|
|
5
|
a5
|
n
|
|
|
6
|
a6
|
n
|
|
|
7
|
a7
|
n
|
|
|
8
|
a8
|
n
|
|
|
9
|
a9
|
n
|
|
|
10
|
a10
|
n
|
|
|
상기의 2테이블이 있습니다.
mem 테이블의 jumin 과 carnum을 그룹형으로 묶어서 고유값을 순차적으로 acct 에 업데이트 시키려고 하고있습니다.
결과테이블
seq
|
acct_no
|
use_yn
|
jumin
|
carnum
|
1
|
a1
|
y
|
1
|
가1
|
2
|
a2
|
y
|
2
|
가2
|
3
|
a3
|
y
|
3
|
가3
|
4
|
a4
|
y
|
4
|
가4
|
5
|
a5
|
y
|
5
|
가5
|
6
|
a6
|
y
|
1
|
가6
|
7
|
a7
|
y
|
5
|
가10
|
8
|
a8
|
n
|
|
|
9
|
a9
|
n
|
|
|
10
|
a10
|
n
|
|
|
그래서 아래와 같이 쿼리문을 작성하여 보았습니다.
DECLARE @CNT INT,
@MINCNT INT,
@JUMIND VARCHAR(20),
@CARNUM VARCHAR(20)
SET NOCOUNT ON
BEGIN
SELECT @CNT = COUNT(JUMIN) FROM (
SELECT JUMIN, CARNUM FROM NEM
GROUP BY JUMIN, CARNUM ) T1
LEFT OUTER JOIN
ACCT T2
ON T1.JUMIND = T2.JUMIN AND T1.CARNUM = T2.JUMIN
WHERE T2.USE_YN IS NULL
SET @MINCNT = 1
SET @CNT = @MINCNT
WHILE(@MINCNT <= @CNT)
BEGIN
BEGIN TRAN TT1
SELECT TOP 1 @JUMIN=JUMIN, @CARNUM=CARNUM FROM (
SELECT JUMIN, CARNUM FROM MEM
GROUP BY JUMIND, CARNUM ) T1
LEFT OUTER JOIN
ACCT T2
ON T1.JUMIN = T2.JUMIN AND T1.CARNUM = T2.CARNUM
ORDER BY USE_YN ASC
-- 업데이트
UPDATE TOP (1) ACCT
SET USE_YN ='Y' , JUMIN = @JUMIND, CARNUM= @CARNUM
WHERE USE_YN='N'
IF @@ERROR <> 0 BEGIN
ROLLBACK TRAN TT1
RETURN (99)
END
COMMIT TRAN TT1
SET @JUMIND = NULL
SET @CARNUM = NULL
SET @MINCNT = @MINCNT + 1
END
ㅡㅡ; 결과는 매우느리네여..1000건 실행하는데 6분40초..
성능향상할 수있는 조언좀 부탁드립니다.
MEM 테이블에 JUMIN 과 CARNUM은 언제든지 데이터가 바뀔 수 있습니다.
ACCT 테이블의 한번 JUMIN과 CARNUM은 복합하여 고유값으로 매핑되어야합니다.
|