2012-04-05 13 views
3

テーブルにCreatedOnというDatetime列があります。 CreatedOnは、注文が降順である非クラスタ化インデックスの一部です。私はC#のコードでは、カットオフ日付を計算して、アドホックにこれを入れていますどこ私はどちらの条件が日時の条件がより速くなるか?

WHERE CreatedOn > '2012-04-04 00:00:00.000' AND ... other conditions 

にこれを変更し

WHERE DateDiff(d,CreatedOn,GetDate()) < 180 AND ... other conditions 

を次のように条件Iが条件を持っていたで以前

クエリ。

私によれば、2番目の条件は高速にする必要がありますが、クエリの実行時間に大きな変化は見られません。しかし、テーブルのサイズが大きくなると、どちらが速く実行されますか?

+0

標準的な回答は次のとおりです。A)本当に問題になると思いますか?そしてB)もしそうなら、あなたのデータ、テーブル構造、インデックス、サーバなどでテストしてください:-)(しかし、私はもっと速いかもしれない、より最適化できると思います。) –

+1

@TJCrowder:A it (一般的なSQLミス)。 BはAのために必要ありません – gbn

+0

@gbn:Aへの答えは必ずしも重要ではありません。それはデータセットに依存します(たとえば、重要なインデックスです)。よくある間違い。 ;-) –

答えて

6

第2の形式。

カラムに関数を置くと、インデックスの使用が無効になります(ほとんどの場合、このルールに従います)。 "Ten Common SQL Programming Mistakes"、番号2を参照してください