私のクエリでは、WHERE
句の2つの日付を比較しています
CONVERT
を一度使用すると:
CONVERT(day,InsertedOn) = CONVERT(day,GETDATE())
もう1つはDATEDIFF
を使用します:
DATEDIFF(day,InsertedOn,GETDATE()) = 0
ここに実行計画があります
InsertedOn
のデータ型はdatetime
です。
どちらがより最適化されていますか?
代わりに、試してください
WHERE InsertedOn>=CAST(GETDATE() AS date) AND
InsertedOn<DATEADD(day, 1, CAST(GETDATE() AS date))
この式は sargable で、最適なパフォーマンスを得るために必要なものです。 @Mikaelが示すように、InsertedOn
が最初の列であり、クエリで使用される他のすべての列がインデックスに含まれるように、インデックスの1つを設計することをお勧めします。クエリに多数の列がある場合は、テーブルのクラスター化インデックスを使用するのがおそらく最善です。 カバーするインデックス を読んでください。
日付を変数として持つ方がいいので、クエリの前に一度だけ取得する必要がありますか?
DECLARE @Today DATE
DECLARE @Tomorrow DATE
SET @Today = GETDATE()
SET @Tomorrow = DATEADD(day,1,GETDATE())
SELECT FROM <Table>
WHERE InsertedOn >= @Today
AND InsertedOn < @Tomorrow