Эта фаза оптимизации запросов учитывает это? - PullRequest
5 голосов
/ 03 августа 2011

У меня есть таблица с индексированным столбцом даты StartDate.Мне было просто интересно, как фаза оптимизации запросов обрабатывает запросы следующей формы:

SELECT * 
FROM <dbo.TABLE> 
WHERE (StartDate BETWEEN '2010-01-01' AND '2010-01-10')
OR (StartDate BETWEEN '2010-01-05' AND '2010-01-15')

Между двумя датами есть совпадениеДолжен ли я сам выполнить оптимизацию, указав даты как (StartDate BETWEEN '2010-01-01' AND '2010-01-15'), или механизм SQL может оптимизировать это сам?

1 Ответ

5 голосов
/ 03 августа 2011

Сравните это с переменными и константами: планы должны отличаться.

SQL Server можно оптимизировать для констант, но он предназначен для повторного использования с переменными. Так что план более общий с переменными. При использовании констант «обобщенный план многократного использования» не требуется, потому что если константы изменятся, это будет новый план

«Переменный» план не будет учитывать такие условия, как end < start, которые будут закорочены с помощью констант.

Как отмечено в комментариях к вопросу, поведение соответствует ожидаемому

Вы должны сделать то же самое для констант с " Принудительная параметризация ", но я не пробовал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...