У меня есть SQL-запрос, план выполнения которого зависит от параметров DateTime, которые я предоставляю. Я понимаю, что если у меня есть условие, подобное:
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 могут повлиять на план выполнения, выбранный для запроса?
РЕДАКТИРОВАТЬ: Очевидно, причина была в том, что у меня был дополнительный индекс только для Date, который запутал SQL Server. После удаления этого индекса все заработало как положено. Но спасибо за идеи. Я не предложил достаточно подробностей для вас, чтобы понять это. Слишком много индексов никогда не бывает хорошим!