안녕하세요.
속도 문제로 글 올립니다.
MS SQL 2008 입니다.
테이블 TBL_TEMP 에는 250만 건의 데이터가 있습니다.
DT_REG_DATE 칼럼은 DATATIME 형식이며 INDEX 되어 있습니다.
----------------------------------------------------------------------
SELECT INT_ID
FROM TBL_TEMP
WHERE 1=1
AND STR_AA= 1
ORDER BY DT_REG_DATE
SQL Server 실행 시간:
CPU 시간 = 47밀리초, 경과 시간 = 43밀리초
----------------------------------------------------------------------
SELECT TOP 1INT_ID
FROM TBL_TEMP
ORDER BY DT_REG_DATE
SQL Server 실행 시간:
CPU 시간 = 2719밀리초, 경과 시간 = 2731밀리초
----------------------------------------------------------------------
위와 같이 엄청난 시간 차이가 있습니다.
가장 오래된 정보 1건만 가져 오고 싶은데..
시간이 너무 오래 걸립니다.
이로 인해 다른 프로시저들도 영향을 받네요.
SELECT TOP 1 을 효율적으로 할 수 있는 방법 이 있을까요 ?!
위와 같이 처리 하는 이유는 다음과 같습니다.
--1. 가장 오래된 데이터 가져옴.
SELECT TOP 1 @INT_ID = INT_ID
FROM TMP_TEMP
WHERE 1=1
AND STR_IS_SAVE = 'N'
AND STR_IS_TAKE = 'R'
ORDER BY DT_UPDATE
--2. 정보 가져옴.
SELECT @INT_ID = INT_ID
FROM TMP_TEMPTEMPTEMP
WHERE 1=1
AND INT_ID = @INT_ID
--3. 업데이트 처리 함. (다른 프로시저.)
SELECT INT_ID
FROM TBL_TEMP
WHERE 1=1
AND STR_AA= 1
이 값을 임시 테이블에 넣고,
그 임시 테이블에서 ORDER BY , TOP 1 해서 가져 오니 속도가 조금 나아지긴 하네요.