读书人

建立sql server2000分区视图失败,该怎

发布时间: 2012-03-13 11:21:11 作者: rapoo

建立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强制转换为分区列的数据类型*/

读书人网 >SQL Server

热点推荐