私は次のようにクエリを実行しています:
SELECT
*
FROM a
WHERE DATEDIFF(D, a.DateValue, DateTimeNow) < 3;
動作していない
3日以内のデータを取得しようとしています。
SQLサーバー。
これを行う方法?
DATEDIFFの動作が遅すぎます。
DateDiff
は非常に高速です...問題は、データベーステーブルの列の値で実行しているため、この列にインデックスがあったとしても、クエリプロセッサはテーブルのすべての行で関数を実行する必要があります。 。これは、テーブル全体をディスクからロードする必要があることを意味します。
代わりに、今日の日付でdateAdd
関数を使用し、データベーステーブルの列をその単一の計算の結果と比較します。現在はDateAdd()
を1回だけ実行し、インデックス(存在する場合)を使用して、述語基準に一致する行のみをロードできます。
Where a.DateValue > DateAdd(day,-3,getdate())
この方法でこれを行うと、クエリ述語が作成されます SARG-able
http://msdn.Microsoft.com/en-us/library/aa258269%28v=sql.80%29.aspx にあるMicrosoftのドキュメントでは、DateTimeNow
の代わりにgetdate()
。そのようにうまく機能しますか?
あなたの質問は悪くないようです。それに取り組む別の方法は次のとおりです。
SELECT * FROM a WHERE a.DateValue > DATEADD(dd,-3,GETDATE())