2016-04-04 23 views
1

我想创建一个分区视图,但是我的执行计划显示它仍在访问两个基础表。我的分区视图仍在访问所有底层基表

SQL Fiddle here

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

+0

表中有多少条记录?顺便说一下,分区视图就像使用过滤器的常规视图。从视图中选择时,SQL服务器仍然需要访问表。 – FLICKER

+0

@ FLICKER这是不正确的。分区视图的目的是专门避免访问可以根据'CHECK'约束条件中定义的特定条件从结果中逻辑排除的表。 –

回答

0

最有可能的问题是,您的CHECK约束不符合您的WHERE条件。

你的检查约束是形式:

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

WHERE条件是形式:

StockDate = '20160101' 

更改检查约束使用完整日期(加上没有必要使用功能 - DATEPART - 用于这样一个简单的过滤器)。以下是针对2016年的表格:

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

对其他表格重复该操作,将两个谓词中的年份更改为与表格年份相匹配。

请注意,上述语法没有说明时间组件,因为所涉及的字段是DATE数据类型。如果数据类型为DATETIME,那么范围的结束将需要表达为:

'12/31/2016 23:59.59.997' 

有关分区视图更多信息,请参阅MSDN页Using Partitioned Views

+1

谢谢!那就是诀窍。 – Lock

+0

@Lock没问题。请参阅我刚才对有关您使用的确切数据类型的答案的更新。 –