아 고수님들 계실때 빨리 질문올립니다.
제가 정적쿼리를 구현할때 다음의 문장을 많이 씁니다.
WHERE (col = @a OR '' = @a)
위의 조건절에서 @a 가 빈값일때 모든 값을 쿼리해오는데요
col 이 인덱스컬럼일 경우 성능에 큰 영향을 미치리라 보시나요?
짐작하신대로 인덱스를 타느냐 못 타느냐로 인해서 당연히 영향이 큽니다.....만
Stored Procedure인 경우 부적절한 실행 계획을 사용하는 "큰 함정"을 만들어 낼 수 있게 됩니다.
즉, SP가 처음 실행될때 @a의 값이 빈 값이면 인덱스를 사용하지 않는 실행 계획이 만들어지고 이 실행 계획이 캐쉬됩니다.
그 후에 @a의 값이 빈 값이 아닌 값이 주어졌을때도 인덱스를 사용하지 않는 실행 계획대로 실행됩니다.
물론 이와 반대되는 경우도 발생할 수 있습니다.
그래서 저의 경우에는 이렇게 합니다.