「パーティション」と呼ぶいくつかのデータベースに分割されたデータベースを使用しています。各パーティションは、特定の月の同じデータ構造を保持します。すべてのパーティションの上部にあるビューは、UNION
データの取得に大きく役立ちます。各パーティションの各テーブルにCHECK CONSTRAINT
は、クエリ オプティマイザーが 2 つの日付間の特定のクエリで不要なパーティションをスキップするのに役立つ、日付の境界に基づいています。これまでのところ、すべて正常に動作しています。
ただし、変数であるとしましょう: を使用してクエリを送信するとWHERE [Date] > @StartDate
、@StartDate
クエリ プランは、すべてのパーティションがUNION
. 変数よりもパラメーターを優先するようにアドバイスしているリソースをいくつか見つけましたが、同じことが起こります。クエリをストアド プロシージャに変更し、日付の範囲をパラメーターとして渡し、WITH RECOMPILE
ヒントを追加しましたが、うまくいきませんでした。を発行しDBCC FREEPROCCACHE
ても役に立ちませんでした。
動的クエリを使用してクエリとパラメーターを連結することを検討しているため、ここでの最良のオプションとして、リテラルの日付範囲を送信します。しかし、それは私を本当に不幸にします (理由はおわかりいただけると思います)。さらに、より良い回避策がなくても、少なくとも何が起こっているのかを理解したい.