分区视图:使用CHECK CONSTRAINT

时间:2012-01-04 17:06:15

标签: view sql-server-2008-r2

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

这篇文章:http://msdn.microsoft.com/en-us/library/ms190019.aspx展示了如何帮助查询优化器更快地在我的分区中查找数据。

但是,当在仅与空分区匹配的日期之间查询我的View上的数据时,查询计划显示它正在每个分区中搜索。我无法弄明白为什么。

我的观点很简单:

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
...

有任何线索吗?

2 个答案:

答案 0 :(得分:1)

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

只要查询计划显示的是seek而不是scan,我就不会担心它,因为seeks相当快。但是,根据scan,您可能也没问题(这不是黑白规则)。

答案 1 :(得分:1)

SQL Server Express版不支持分区视图。

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