-
MSSQL SELECT와 UPDATE 동시에 하기Database/MSSQL 2018. 10. 2. 11:51반응형
프로그램 내에서
데이터를 select하여 가져온 다음에 row 하나씩 작업을 처리한 후 row 하나를 update를 하는 과정이
처리속도가 오래 걸리는 문제가 있었다.
select한 데이터는 플래그만 바꿔주면 되는 간단한 문제인데
처리속도가 느려서 그 뒤에 작업들도 너무 오래 걸린다.
방법을 달리하였다.
update를 프로그램이 수행을 하여 느려진 것이니
데이터베이스 자체에서, 쿼리에서 처리가 되도록 하는 방법을 생각했다.
MSSQL은 저장프로시저가 있으니 저장프로시저에서 작업이 일어나고
프로그램에선 프로시저를 실행해 데이터만 가져오면 된다.
1. 임시테이블을 만든다.
declare @AAA table (
[CreateDate] [datetime] NOT NULL,
[UserID] [varchar](8) NOT NULL,
[TermID] [char](3) NOT NULL,
[CtrlerIDs] [varchar](44) NULL
)
2. 임시테이블에 select한 데이터를 insert한다.
INSERT INTO @AAA(CreateDate,UserID,TermID,CtrlerIDs)
select top 1000 CreateDate,UserID,TermID,CtrlerIDs
from [실제테이블]
where Flag_Y ='N'
order by nNum, Visitor desc, CreateDate
3. 임시테이블과 실제테이블을 조인해 select한 데이터들을 update 한다.
UPDATE [실제테이블] SET Flag_Y='Y'
FROM @AAA a
inner join [실제테이블] b ON a.CreateDate = b.CreateDate and a.UserID =b.UserID and a.TermID=b.TermID
4. 임시테이블을 select한다.
SELECT CreateDate,UserID,TermID,CtrlerIDs FROM @AAA
이렇게 쿼리를 작성해 저장 프로시저로 만들고
프로그램에선 exec [프로시저명]으로 데이터를 가져오니
속도가 확실히 빨라졌다.
앞으로 select 함과 동시에 update가 일어나야할 데이터들은 이와 같이 쿼리를 작성하여 만들면 될 듯하다.
반응형'Database > MSSQL' 카테고리의 다른 글
MSSQL [펌] 성능 향상을 위한 팁 (0) 2018.10.17 MSSQL Datetime formats (0) 2018.10.15 MSSQL UPDATE with row_number() (0) 2018.09.04 MSSQL 오류 해결 트랜잭션 로그가 꽉 찼습니다. (0) 2018.08.17 MSSQL 날짜 계산 DATEADD (날짜형식이 문자열일때 포함) (0) 2018.07.04