Sql 分区视图中约束和位置之间的差异
在我的新工作中,我在SQL Server 2008 Enterprise中发现了如下分区视图:Sql 分区视图中约束和位置之间的差异,sql,sql-server,sql-server-2008,partitioning,Sql,Sql Server,Sql Server 2008,Partitioning,在我的新工作中,我在SQL Server 2008 Enterprise中发现了如下分区视图: ... SELECT * FROM [SERVER1].DATA_2012_7_1.dbo.DATA WITH (nolock) WHERE DateTime >= '2012-07-01' AND DateTime <= '2012-07-15 23:59:59.997' UNION ALL SELECT * FROM [SERVER2].DATA_2012_7_
...
SELECT *
FROM [SERVER1].DATA_2012_7_1.dbo.DATA WITH (nolock)
WHERE DateTime >= '2012-07-01' AND DateTime <= '2012-07-15 23:59:59.997'
UNION ALL
SELECT *
FROM [SERVER2].DATA_2012_7_16.dbo.DATA WITH (nolock)
WHERE DateTime >= '2012-07-16' AND DateTime <= '2012-07-31 23:59:59.997'
UNION ALL
...
。。。
挑选*
来自[SERVER1]。数据\u 2012\u 7\u 1.dbo.DATA WITH(nolock)
其中DateTime>='2012-07-01'和DateTime='2012-07-16'和DateTime来自:
分区视图不需要检查约束来返回正确的结果。但是,如果没有定义检查约束,查询优化器必须搜索所有表,而不是只搜索包含分区列上搜索条件的表。在没有检查约束的情况下,该视图的操作方式与使用UNION ALL的任何其他视图相同。查询优化器不能对存储在不同表中的值做出任何假设,也不能跳过搜索参与视图定义的表
因此,它的性能可能不尽相同(对于检查
约束可能消除了一些分区的查询)
查询优化器可能足够聪明,可以根据视图内部的WHERE
子句和在访问视图的查询中应用的任何条件之间的交集,有效地执行分区消除-但是在实现消除的文档化方法之间进行选择(CHECK
约束)和一个未记录的约束(优化器结合WHERE
子句和其他条件),我知道我会选择哪一个