View 分区视图:使用检查约束

View 分区视图:使用检查约束,view,sql-server-2008-r2,View,Sql Server 2008 R2,为了在SQL Server 2008 R2 Express数据库中存储大量数据,我将数据拆分为多个数据库,每个月创建一个新的“分区” 这篇文章:展示如何帮助查询优化器在我的分区中更快地找到数据 但是,当在我的视图上查询仅与空分区匹配的日期之间的数据时,查询计划显示它正在每个分区中查找数据。但我不明白为什么 我的看法很简单: SELECT A.Gohan, B.Goku FROM [Feb2011].[dbo].[A] LEFT OUTER JOIN [Feb2011].[dbo].[B] UNI

为了在SQL Server 2008 R2 Express数据库中存储大量数据,我将数据拆分为多个数据库,每个月创建一个新的“分区”

这篇文章:展示如何帮助查询优化器在我的分区中更快地找到数据

但是,当在我的视图上查询仅与空分区匹配的日期之间的数据时,查询计划显示它正在每个分区中查找数据。但我不明白为什么

我的看法很简单:

SELECT A.Gohan, B.Goku
FROM [Feb2011].[dbo].[A]
LEFT OUTER JOIN [Feb2011].[dbo].[B]
UNION ALL
SELECT A.Gohan, B.Goku
FROM [Mar2011].[dbo].[A]
LEFT OUTER JOIN [Mar2011].[dbo].[B]
UNION ALL
...

有什么线索吗?

这是因为这些不是真正的分区。如果基于日期在每个数据库表上构建索引,那么它将检查该索引并快速返回0行。如果它是真正分区的,那么您将获得预期的行为。但事实并非如此,因此它将检查
union
语句中的每个表,以返回一个空结果集


只要查询计划显示的是
搜索
,而不是
扫描
,我一点也不担心,因为
搜索
相当快。不过,根据
扫描的情况,您可能也会没事(这不是黑白规则)。

SQL Server Express edition不支持分区视图

检查MSDN页面的SQL Server Express部分中不支持的SQL Server功能