質問:
DateTime.Now
パラメータとして proc に渡すと、SQL Server がクエリ プランをキャッシュできなくなりますか? もしそうなら、ウェブアプリは大幅なパフォーマンスの向上を逃していますか?
考えられる解決策:
DateTime.Today.AddDays(1)
可能な解決策になると思いました。同じ終了日を sql proc に渡します (1 日あたり)。また、ユーザーは引き続き最新のデータを取得できます。こちらもご相談ください。
与えられた例:
ストアド プロシージャがあるとします。Web ページでユーザーにデータを報告します。ユーザーは日付範囲を設定できます。ユーザーが今日のデータを含む「終了日」として今日の日付を設定すると、Web アプリDateTime.Now
は sql プロシージャに渡します。
1 人のユーザーがレポートを何度も実行する5/1/2010
とnow
します。Web ページで、ユーザーには が表示5/1/2010
され5/4/2010
ます。ただし、Web アプリDateTime.Now
は終了日として sql proc に渡します。そのため、ユーザーが同様の日付範囲を照会していても、proc の終了日は常に異なります。
テーブル内のレコード数とユーザー数が多いとします。したがって、パフォーマンスの向上は重要です。したがって、質問の重要性。
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)
現在の時刻が であるため、両方の proc に対して同じデータが返されます2010-05-04 15:41:27
。