У меня есть запрос SQL, чей план выполнения зависит от параметров DateTime, которые я предоставляю. Я понимаю, что если у меня есть условие, как:SQL Server 2008: план выполнения зависит от параметров даты
WHERE Date > '2012-02-28' AND Date < '2012-01-01'
то выполнение плана будет просто оценка постоянной, потому что результат не будет возвращен. Но в других случаях я получаю разные планы исполнения, которые не имеют для меня никакого смысла. Например, с условием:
WHERE Date >= '2012-02-01 00:00:00' AND Date <= '2012-02-02 22:00:00'
В запросе используется индекс, который я добавил, и он оптимизирован. Но если я сменил это состояние на:
WHERE Date >= '2012-02-27 00:00:00' AND Date <= '2012-02-27 22:00:00'
не использует этот указатель.
Прежде чем запускать запросы, я перестроил все индексы на этой таблице. Я не могу найти в этом никакой логики. Поэтому мой вопрос: как параметры DateTime влияют на какой план выполнения для запроса?
EDIT: По-видимому, причина в том, что у меня был дополнительный индекс в Дате, который только путал SQL Server. После удаления этого индекса все работало, как ожидалось. Но спасибо за идеи. Я не предлагал достаточно подробностей для вас, чтобы понять это. Слишком много индексов никогда не бывает хорошим!
Спасибо за идеи (я даже не знал, что отфильтрованные индексы существуют). Индекс не фильтруется, и таблица не разбивается на разделы. Кажется, что план запроса зависит от статистики. –