Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 分区视图中约束和位置之间的差异_Sql_Sql Server_Sql Server 2008_Partitioning - Fatal编程技术网

Sql 分区视图中约束和位置之间的差异

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_

在我的新工作中,我在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_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
子句和其他条件),我知道我会选择哪一个