为了在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
...
有任何线索吗?
答案 0 :(得分:1)
这是因为这些不是真正的分区。如果基于日期在每个数据库表上构建索引,那么它将检查该索引并快速返回0行。如果它是真正分区的,那么你会得到你期望的行为。但事实并非如此,因此它将检查union
语句中的每个表以返回空结果集。
只要查询计划显示的是seek
而不是scan
,我就不会担心它,因为seeks
相当快。但是,根据scan
,您可能也没问题(这不是黑白规则)。
答案 1 :(得分:1)
SQL Server Express版不支持分区视图。
检查MSDN上SQL Server Express Features页面的 SQL Server Express中不支持的SQL Server功能部分。