建立sql server2000分区视图失败
建表存储过程
CREATE PROCEDURE CreateLogTable @strID varchar
AS
declare @strSQL nvarchar(256)
set
@strSQL= 'Create Table UserLog ' +@strID+
'( LogID bigint,
[log] varchar(200),
UserID int,
APID int PRIMARY KEY(apid,logid) check (APID= '+@strID+ '),
[Date] datetime)
'
print @strSQL
exec sp_executeSQL @strSQL
GO
然后建了两个表,UserLog1,UserLog2
分区视图:
create view userlog as
SELECT *
FROM UserLog1 union all select * from Userlog2
查询:
select * from userlog where apid=1
查询计划显示两个表个占查询成本的50%,也就是分区视图没有起作用。但是如果用细下面的查询语句:
select * from userlog where apid=1 and LogID=1
就显示只查了一个表,查询优化成功。
这到底是为什么啊,分区键不是只要是主键的一部分就可以了吗。请高手解惑,谢谢。(分不多,请大家多多包涵了)
------解决方案--------------------其实你建的分区视图没有错,联合主键也没有错,错在查询了.
分区视图在查询的时候要求查询的值与分区列的类型相同,而你在查询where apid=1时,SQLSERVER会将1视为tinyint,但apid的类型却为int,因此数据类型不对,导致分区失效,进行全区扫描.
这样处理一下,把分区列的查询值显示转换为分区列的数据类型,例如:
select * from userlog where apid = CAST(1 as int) /*将1强制转换为分区列的数据类型*/