驚いたことに、インラインで GETDATE() を使用する方が、この種の計算を事前に実行するよりも効率的であるように思われることがわかりました。
DECLARE @sd1 DATETIME, @sd2 DATETIME;
SET @sd1 = GETDATE();
SELECT * FROM dbo.table
WHERE datetime_column > DATEADD(MINUTE, -1440, @sd1)
SELECT * FROM dbo.table
WHERE datetime_column > DATEADD(MINUTE, -1440, GETDATE())
SET @sd2 = DATEADD(MINUTE, -1440, @sd1);
SELECT * FROM dbo.table
WHERE datetime_column > @sd2;
それらの計画を確認すると、中央のクエリは常に最小のコストで出てきます (ただし、常に最小の経過時間ではありません)。もちろん、それはインデックスとデータに依存する可能性があり、あるクエリに基づいて、同じプリエンプティブ最適化が別のクエリで機能するという仮定を立てるべきではありません。私の本能は、インラインで計算を実行せず、代わりに@sd2
上記のバリエーションを使用することです...しかし、私は自分の本能を常に信頼することはできず、経験した行動に基づいて一般的な仮定を立てることはできないことを学びました.特定のシナリオ。