올 해 이전에 가입한 회원(작년까지 가입한 회원)을 조회하고 싶어서 조건을 걸려고 한다.

이 때 여러가지 방법을 시도해봤는데 SQL 의 속도는 다음과 같았다. (DB 성능과 데이터 양에 따라 절대 시간은 차이가 나고 속도 비율만 보면 됩니다.)

하드코딩

AND dm.MemberRegisterDate < '2020-01-01'

>> 4.2s

수식을 비교 연산자에 직접 대입

AND dm.MemberRegisterDate < (CONVERT(VARCHAR(10), DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()), 0), 23))

>> 4.2s

수식을 통해 변수에 값을 저장하고 사용

DECLARE @ThisYearFirstDay VARCHAR(10)
SET @ThisYearFirstDay = (CONVERT(VARCHAR(10), DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()), 0), 23))

...

AND dm.MemberRegisterDate < @ThisYearFirstDay

>> 2분 넘어가서 그냥 취소함...

 

 

변수에 담아두면 재사용성도 좋고 성능은 수식에 직접 대입한 것과 같을줄 알았는데 아니었다...

+ Recent posts