今天在读《Oracle高级SQL编程》这本书的时候,在关于Oracle的全局索引的章节里面有一段讲到如果对一张分区表创建一条唯一索引,而索引本身也是分区的,那就必须把分区列也加入到索引列表中去,当然不一定要再第一列。后来自己就去SQL Server上也试了一下。果真和Oracle一样的道理。再看到后面章节算是理解了。因为如果表被分区了,其实就是每个分区等于一个索引树了。这也就是为什么在SQL Server下这张sys.partitions系统视图中每个partition对应了一个hobt_id。
create partition function PF_One_Fifty_OneHundred(INT) AS RANGE LEFT FOR VALUES(1,50,100) GO CREATE PARTITION SCHEME PS_One_Fifty_OneHundred AS PARTITION PF_One_Fifty_OneHundred TO ([PRIMARY], [PRIMARY], [PRIMARY], [PRIMARY]); GO --DROP TABLE dbo.partition_test create table dbo.partition_test ( col1 INT , col2 INT ) ON PS_One_Fifty_OneHundred(col1) GO CREATE UNIQUE INDEX UIX_partition_test_col1 ON dbo.partition_test(col1) ON PS_One_Fifty_OneHundred(col2); Msg 1913, Level 16, State 1, Line 35 The operation failed because an index or statistics with name 'UIX_partition_test_col1' already exists on table 'dbo.partition_test'.