1

MSSQL サーバーでホストされているデータベースのテーブルに対してクエリを実行する必要があります。

クエリは次のとおりです。

select *
from tableA
where createdOn between @startDate and @endDate

変数 @startDate および @endDate の型は datetime です。@endDate が現在の日付に等しく、@startDate が 1 か月前の日付に等しい場合、次のいずれかのクエリを作成できると考えました。

declare @startDate datetime
declare @endDate datetime

set @startDate = DATEADD(month,-1,GETDATE())
set @endDate = GETDATE()


select *
from tableA
where createdOn between @startDate and @endDate

またはとして

select *
from tableA
where createdOn between DATEADD(month,-1,GETDATE()) and GETDATE()

2 番目のクエリでは where 句で関数を呼び出すため、最初のクエリは 2 番目のクエリよりも高速であると考えました。クエリの両方のバージョンを作成し、それらも実行しました。ただし、パフォーマンスに大きな違いはありませんでした。

なぜ変化が見られなかったのか、誰かが説明してくれませんか。おそらく、最初のクエリは 2 番目のクエリよりも高速である必要があるという考えは誤りでした。私に知らせてください、IDはそうです、なぜ間違っているのですか。

助けてくれてありがとう。

4

1 に答える 1

2

クエリ オプティマイザー。

クエリ オプティマイザは、両方のクエリを同じにしました。GETDATE() がすべてのテストで同じであることを認識しているため、呼び出しを最適化します。

こちらをお読みください: Query Optimizer Deep DiveQuery Optimizerで、必要以上の情報を得ることができます :-)

于 2013-11-12T11:02:09.630 に答える