Я играю с двумя очень простыми запросами. Существует некластеризованный индекс с 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.