我正在使用一个数据库,该数据库分为几个数据库,我将其称为“分区”。每个分区在特定月份保存相同的数据结构。所有分区顶部的视图对数据检索有很大UNION
帮助,每个分区的每个表都有一个CHECK CONSTRAINT
基于日期的界限,这有助于查询优化器在两个日期之间跳过特定查询的不需要的分区。到目前为止一切正常。
但是,当我提交查询时,假设:WHERE [Date] > @StartDate
作为@StartDate
变量,查询计划显示每个分区都包含UNION
. 我发现一些资源建议更喜欢参数而不是变量,但同样的情况也会发生。我什至将查询更改为存储过程,将日期范围作为参数传递,并添加了WITH RECOMPILE
提示,但没有运气。发出一个DBCC FREEPROCCACHE
也没有帮助。
我正在考虑使用动态查询,将查询和参数连接起来,以便我提交文字日期范围,这是我最好的选择。但这让我真的很不开心(我想你可以明白为什么)。此外,即使没有更好的解决方法,我也想至少了解发生了什么。