안녕하세요.

작업을 하면서 신기하고도 재미난 부분을 발견해서 문의 드리게 되었습니다.

 

일단 SQL 스튜디오에서 쿼리를 실행 하면 속도가 1분 내외인 쿼리가 있는데요

해당 쿼리를 프로시저로 변경해서 똑같이 스튜디오로 실행하면 10분 넘게 결과값이

안나오는 경우 입니다.

 

쿼리 실행시 DECLARE @변수를 이용하여 수행을 했는데요

프로시저의 파라미터 @변수와 데이터 타입 및 변수명까지 똑같습니다.

 

그래서 설마 하는 마음에 프로시저 내부에서 별도의 @변수를 선언해서 값을 설정해서

실행했더니 속도가 쿼리 실행시와 똑같이 나왔습니다.

 

기존의 다른 프로시저 들도 변경을 해줬더니 지금까지 느린 속도가 꽤 많이 개선이 되었습니다.

 

왜 프로시저 파라미터 @변수를 직접 안쓰고 별도로 @변수 선언해서 사용하면 속도가 빠른걸까요?

많은 조언 부탁드립니다.

 

↓ 아래는 위의 대한 참고 설명입니다.

------------------------------------------------------------------실행속도 1분내외

DECLARE @변수1 .....

SELECT ~ FROM WHERE 변수 = @변수1 ...

-----------------------------------------------------------------------------------------

 

------------------------------------------------------------------실행속도 10분넘게 안됨

EXEC DBO.프로시저명 @변수1 .....

프로시저 내부

CREATE PROC DBO.프로시저명

@변수1

...

AS 

    SELECT ~ FROM WHERE 변수 = @변수1 ...

 

   ※ 아래와 같이 변경후 속도가 개선됨

   DECLARE @변경변수1 .....

   SET @변경변수1 = @변수1

   ------

   SELECT ~ FROM WHERE 변수 = @변경변수1 ...

 

-----------------------------------------------------------------------------------------