2
두 개의 매우 간단한 쿼리를 사용하고 있습니다. StartDate
및 EndDate
뿐만 아니라 Id
이 포함 된 클러스터되지 않은 인덱스가 있습니다.선택적 매개 변수 및 날짜 인덱스
DECLARE @startDate DATETIME, @endDate DATETIME
SELECT @startDate = '4/1/2011', @endDate = '5/1/2011'
-- Does Index Scan (slow)
SELECT Id
FROM dbo.Table
WHERE
(@startDate IS NULL OR StartDate >= @startDate) AND
(@endDate IS NULL OR EndDate < @endDate)
-- Does Index Seek (fast)
SELECT Id
FROM dbo.Table
WHERE
(StartDate >= @startDate) AND
(EndDate < @endDate)
인덱스를 가지고 쿼리를 미리 계산을 다시 정렬하거나 변경할 수있는 방법이 있나요 찾는 첫 번째 예에서 발생?
편집 :이 항목은 매우 기본적인 색인 생성 문제입니다. 변수를 선언하고 있지만 sproc의 매개 변수가됩니다.
이것은 모두 동일하지 않습니다. NULL EndDate 또는 StartDate가있는 항목은 제외됩니다. OP의 첫 번째 쿼리에는 해당되지 않습니다. – MartW
@CodeByMoonlight : 맞습니다. 제 경우 StartDate는 null을 가질 수 없지만 EndDate는 그렇게 할 수 있습니다. –
@CodeByMoonlight : 실제로, 검색 조건 자로'EndDate'를 사용할 수는 없지만 여전히'StartDate'를 사용할 수 있습니다. 그래도 여전히 도움이됩니다. 일반적으로 최근 항목 만 가져 오므로 이미 큰 도움이됩니다. 내 특정 구현이 아니라 원래 질문의 목적을 위해 'StartDate'가 nullable 일 경우이 작업을 수행 할 수 있습니까? –