【发布时间】:2015-01-15 02:18:36
【问题描述】:
我使用 SQL Server 2012,我有一个大表,我将我的表划分为一些表,如下所示:
Create Table A2013
(
Id int identity(1,1),
CountA int ,
Name varchar(50),
ADate DATETIME NULL
CHECK (DATEPART(yy, ADate) = 2013)
)
Create Table A2014
(
Id int identity(1,1),
CountA int ,
Name varchar(50),
ADate DATETIME NULL
CHECK (DATEPART(yy, ADate) = 2014)
)
Insert Into A2013 Values ( 102 , 'A','20131011' )
Insert Into A2013 Values (15 , 'B' ,'20130211' )
Insert Into A2013 Values ( 54, 'C' ,'20131211' )
Insert Into A2013 Values ( 54, 'D' ,'20130611' )
Insert Into A2013 Values ( 95, 'E' ,'20130711' )
Insert Into A2013 Values (8754 , 'F' ,'20130310' )
Insert Into A2014 Values ( 102 , 'A','20141011' )
Insert Into A2014 Values (15 , 'B' ,'20140911' )
Insert Into A2014 Values ( 54, 'C' ,'20140711' )
Insert Into A2014 Values ( 54, 'D' ,'20141007' )
Insert Into A2014 Values ( 95, 'E' ,'20140411' )
Insert Into A2014 Values (8754 , 'F' ,'20140611' )
我创建了一个partition view,如下所示:
Create View A
As
Select * From A2013
Union
Select * From A2014
我希望SQL Optimizer 使用一个好的计划并使用我的 CHECK 约束定义来确定哪个成员表包含行但是在运行此查询时它会扫描两个表:
Select * From A Where A.ADate = '20140611'
我预计 SQL 优化器不使用表 A2013?!?
【问题讨论】:
-
如果显式添加
AND DATEPART(yy, ADate) = 2014会怎样? -
为什么不使用分区,这样就不需要多个表了。
-
@RADAR 什么时候最常使用分区视图?
-
@ArdalanShahgholi, msdn.microsoft.com/en-us/library/ms188730.aspx ,您实际上将数据拆分到不同的文件组中
-
@RADAR 坦克等待您的回复,但我们最常使用分区视图是什么时候?
标签: sql sql-server sql-server-2012 sql-view