我的分区视图仍在访问所有底层基表

时间:2016-04-04 21:49:20

标签: sql sql-server-2012 partitioned-view

我正在尝试创建一个分区视图,但是我的执行计划显示它仍在访问两个基础表。

SQL Fiddle here

为什么我的查询仍然访问两个基础表然后连接它们?

1 个答案:

答案 0 :(得分:0)

问题很可能是您的CHECK约束与WHERE条件不匹配。

您的检查约束采用以下形式:

(datepart(year,[StockDate])=(2016))

您的WHERE条件采用以下形式:

StockDate = '20160101'

更改您的Check Constraints以使用完整日期(此外,无需使用函数 - DATEPART - 用于这样一个简单的过滤器)。以下是2016年表:

[StockDate] >= '01/01/2016' AND [StockDate] <= '12/31/2016'

对其他表重复此操作,更改两个谓词中的年份以匹配表的年份。

请注意,上面的语法没有说明时间组件,因为有问题的字段是DATE数据类型。如果数据类型为DATETIME,则范围的结尾需要表示为:

'12/31/2016 23:59.59.997'

有关分区视图的详细信息,请参阅Using Partitioned Views的MSDN页面。