Вопрос:
Предотвращает ли передача DateTime.Now
в качестве параметра для процесса SQL Server от кэширования плана запроса? Если да, то веб-приложение упускает огромный прирост производительности?
Возможное решение:
Я думал, что DateTime.Today.AddDays(1)
будет возможным решением. Он будет передавать ту же дату окончания в sql proc (в день). И пользователь все равно получит последние данные. Пожалуйста, говорите и с этим.
Пример:
Допустим, у нас есть хранимая процедура. Он сообщает данные обратно пользователю на веб-странице. Пользователь может установить диапазон дат. Если пользователь устанавливает текущую дату как «конечную дату», которая включает сегодняшние данные, веб-приложение передает DateTime.Now
в sql proc.
Допустим, один пользователь запускает отчет - от 5/1/2010
до now
- многократно. На веб-странице пользователь видит 5/1/2010
до 5/4/2010
. Но веб-приложение передает DateTime.Now
в sql proc в качестве даты окончания. Таким образом, конечная дата в процедуре всегда будет отличаться, хотя пользователь запрашивает аналогичный диапазон дат.
Предположим, что количество записей в таблице и количество пользователей велико. Так что любой выигрыш в производительности имеет значение. Отсюда важность вопроса.
Пример процедуры и выполнения (если это помогает понять):
CREATE PROCEDURE GetFooData
@StartDate datetime
@EndDate datetime
AS
SELECT *
FROM Foo
WHERE LogDate >= @StartDate
AND LogDate < @EndDate
Вот пример выполнения с использованием DateTime.Now:
.
EXEC GetFooData '2010-05-01', '2010-05-04 15:41:27' -- passed in DateTime.Now
Вот пример выполнения с использованием DateTime.Today.AddDays (1)
EXEC GetFooData '2010-05-01', '2010-05-05' -- passed in DateTime.Today.AddDays(1)
Для обоих процедур возвращаются одинаковые данные, поскольку текущее время: 2010-05-04 15:41:27
.