ALTER Proc dbo.up_AccountIDCheck
@reVal int output
as
Set Nocount on
Set Xact_Abort On
--SELECT Process
IF EXISTS(Select 1 from tbl_Login where f_loginid = @Loginid)
Begin
set @reVal = 2 --중복된 아이디 존재
return
End
IF EXISTS(Select 1 from tbl_JoinLimitation where f_field='loginid' and f_value = @Loginid)
Begin
set @reVal = 3 --가입제한 아이디
return
End
SET @reVal = 0 -- 중복된 아이디 없음
Return
GO
[원래 쿼리]
IF EXISTS(Select 1 from tbl_JoinLimitation where f_field='loginid' and f_value = @Loginid)
[바꾼 쿼리]
IF EXISTS(Select 1 from tbl_JoinLimitation where f_value = @Loginid and f_field='loginid')
원래 조건절에 f_field='loginid'가 먼저 처리 되도록 작성되었으나,
f_value = @Loginid 를 앞으로 보냄으로, 더 나은 속도향상을 보일수 있다.
이 원리는 Index Seek 에 있다.
f_value = @Loginid / f_field='loginid'
이 둘중 어느것이 데이터가 더 많은가?
당연히 @Loginid 값은 unique한 데이터 이므로 1개씩 밖에 존재하지 않는다.
그러나. f_field='loginid' 이 데이터는 @Loginid 에 비해 더 많은 동일한 값이 존재한다.
f_value = @Loginid(
f_field='loginid' 를 먼저 찾고 @Loginid 를 찾는다면, f_field='loginid' 의 존재수만큼 액세스가 이루어 지게 된다.