테이블이 있는데 이것을 History
이라고합시다. 기본 키 (일명 Clustered Index)는 HIST_ID
입니다. 테이블에는 개발 DB에 약 2300 개의 행이 있습니다. 이제 다음과 같은 두 가지 쿼리를 고려하십시오SQL Server, 인덱스 및 매개 변수가있는 특별한 경우
쿼리 1 :
declare @x int
set @x = 14289
select * from History where [email protected]
질의 2 :
이declare @x int
set @x = 14289
select * from History where [email protected] or @x is null
유일한 차이점은 끝에 or @x is null
입니다. 그러나 첫 번째 쿼리는 두 번째 인덱스 스캔 인 인덱스 찾기를 수행합니다. 뭐라 구요?
선결제 응답 - 아니요, 옵션 (재 컴파일)이 도움이되지 않습니다.
추가 : 견고한 논증의 사실을 말하고 싶습니다. 추측이 아닙니다. 나는 이것에 대한 십여 가지의 가능한 이유를 생각할 수있다. 하지만 여기에 무슨 문제가 있습니까?
에헴, 자세히보세요! "is null"은 @x가 아니라 테이블에 대해 수행됩니다! 그것은 일정한 FALSE 식입니다! –
그의 노조에있는 두 번째 SELECT 문은 ** 항상 ** 빈 세트를 반환합니다. @x의 값은 14289이며 null이 아닙니다. –
누적 업데이트 5가 릴리스 된 후에 지원이 다시 추가되었습니다. 최신 업데이트를 얻은 경우 광고 된대로 작동합니다. – NotMe