2012-04-05 2 views
3

У меня есть столбец Datetime с именем CreatedOn в таблице. CreatedOn также является частью некластеризованного индекса, где порядок убывает.Какой где в Datetime будет быстрее?

Ранее в котором состояние у меня было условие следующим

WHERE DateDiff(d,CreatedOn,GetDate()) < 180 AND ... other conditions 

Я изменил это

WHERE CreatedOn > '2012-04-04 00:00:00.000' AND ... other conditions 

где я вычисляя дату отсечки в C# код, а затем положить, что в AdHoc запрос.

По моему мнению, второе условие должно быть быстрее, но я пока не вижу значительного изменения времени выполнения запроса. Но по мере роста размера таблицы, какой из них будет работать быстрее?

+0

Стандартные ответы: A) Как вы думаете, это будет иметь значение? И B) Если это так, проверьте его с вашими данными, структурой таблицы, индексами, сервером и т. Д. :-) (Но я бы ожидал, что второй будет более оптимизирован, что может быть быстрее.) –

+1

@TJCrowder: A it (обычная ошибка SQL). B не нужно из-за A – gbn

+0

@gbn: Ответ на вопрос A не ** обязательно, обязательно это имеет значение. Это зависит от набора данных (например, важно значение индекса). Общая ошибка. ;-) –

ответ

6

Вторая форма.

Включение функций в столбцы делает недействительным использование индексов (почти во всех случаях, поэтому просто следуйте этому правилу всегда). См. "Ten Common SQL Programming Mistakes", номер 2

Смежные вопросы