이 조건을 내 where 절의 일부로 사용하고 있습니다 : exists (select * from PRPB PB where PA.mid = PB.mid and (@inpo is null or PB.inpo = @inpo)) order by price
.조건부 테스트를 추가 할 때 속도가 느립니다.
null이 아닌 값을 테스트하는 동안이 조건을 대신 사용하면 쿼리가 훨씬 빠르게 실행됩니다. exists (select * from PRPB PB where PA.mid = PB.mid and (PB.inpo = @inpo)) order by price
. 이것이 무시할 수없는 속도 차이를 일으킨다는 것은 @inpo로 필터링할지 여부를 결정하기 위해 if 문과 함께 두 개의 별도 쿼리를 사용해야한다는 것을 의미합니다. 이것은 많은 코드 반복을 의미하기 때문에 나에게 나쁜 영향을 미친다.
상황은 내가 시도 :
- 조금 만들기 그 @inpo가 null 그와 비교입니다 저장 여부를 지정합니다.
- 무효성 검사를 exist 문 왼쪽으로 옮기고 전체 또는 일부를 수행하십시오 (이로 인해 상황이 많이 느려지는데 놀랍습니다).
- 무효 검사를 where 클래스의 맨 왼쪽으로 이동하고 모든 절을 사용하여 검사를 수행합니다 (이 작업도 느려지는데 전혀 놀라지 않습니다. 무효 검사는 항상 발생합니다. 여부 PA.mid = PB.mid).
내 목표는 내 쿼리를 두 번 복사하지 않고이 검사를 훨씬 빠르게 수행하는 것입니다.
이것이 가능합니까? 그렇지 않다면 왜 안 되겠습니까? 그렇다면 어떻게?
참고 : 제 2의 관련 질문 here도 참조하십시오.
@Alex : 롤백. 아무도 sqlserver2005 태그를 사용하지 않으므로 다소 인기있는 sqlserver2005 태그 외에도이를 사용하는 것이 바보처럼 보입니다. SQL 태그는 중복되지만 덜 어리 석다. – Brian
무언가가 장면 뒤에서 발생합니다. 어제는 sqlserver2005 태그가 인기가 있었지만 이제는 모든 내용이 sql-server-2005로 태그가 다시 지정되었습니다. –
시도해 보셨습니까 (PB.inpo = @inpo 또는 @inpo가 null입니까?) –