2011-08-02 14 views
5

私は、日付の列StartDateが付いたテーブルを持っています。私は、クエリ最適化フェーズが以下の形式のクエリをどのように処理するのか疑問に思っていました。クエリ最適化フェーズでこれを考慮していますか?

SELECT * 
FROM <dbo.TABLE> 
WHERE (StartDate BETWEEN '2010-01-01' AND '2010-01-10') 
OR (StartDate BETWEEN '2010-01-05' AND '2010-01-15') 

2つの日付の間に重複があります。私は(StartDate BETWEEN '2010-01-01' AND '2010-01-15')という日付を与えて最適化を行うべきでしょうか、それともSQLエンジンがこれを最適化できますか?

+1

実行計画には何が表示されますか? – gbn

+0

それは私に同じ計画を示しています。実際には、各コンポーネントの詳細を掘り下げて、1分後に戻ってみましょう。 – Legend

+0

これは同じI/OとCPUコストを示しています。あなたは私自身の質問に答えさせてくれたと思う。 – Legend

答えて

5

変数と定数との比較:計画は異なるはずです。

SQL Serverは定数を最適化できますが、変数を使用して再利用することを目的としています。だから、計画はより一般的な変数です。定数が使用される場合、定数が変更されると新しい計画になるので、「一般化された再利用可能なプラン」は必要ありません。

"可変"プランは定数で短絡するend < startのような条件を考慮しません。

質問へのコメントで述べたように

を予想通り、動作は、あなたが同じ「Forced Parameterization」と定数のために起こるが、私は試していない作るべきです。

関連する問題