質問: SQL ServerにおいてWHERE句として、前日分を条件として指定する際に 最もコストが抑えられるのはどのような記述の仕方でしょうか。 日付型項目(yyyy-mm-dd hh:mm:ss) 日付型項目 >= DATEADD(d, -1, GETDATE()) and 日付型項目 < DATEADD(d,0, GETDATE())) とかですかね?
回答: SQL Server の処理は、SQL文全体をクエリオプティマイザが解釈して実行計画を立て、コンパイルし実行します。 ですからWHERE句だけでの最適解はありません。 また、クエリオプティマイザは統計情報やバージョンによって細かい挙動が変わってきます。 よってSQL文全体の最適解もその場の実行環境でのみ有効です。 それを踏まえたうえでのアドバイスとしては、 1. クエリオプティマイザが解釈しやすいように極力シンプルに書く。 2. キャッシュは期待してもいい。 です。 そこで私のお勧めは、 CONVERT (date, 日付型項目) = DATEADD (d, -1, CONVERT (date, 日付型項目)) です。 CONVERT (date, 日付型項目) を2度書くのは冗長ですが、それはクエリオプティマイザに期待します。 PS.ここまで書いて何ですが、tacsheavenさんに一票入れました。