问题: 重建分区表索引时,碰到一个错误:
*Partition columns for a unique index must be a subset of the index key*
故事原型:
有一张已经做好分区的表,表上已经建好主键。 现在发现主键需要修改,需要去掉主键中的分区键。
分区 schema: MonthlyScheme
分区函数: MonthlyPartition
分区表: dbo.FctSales(ProductionKey bigint, MonthlyKey bigint, Sales decimal(19,2) ) MonthlyPartition(MonthlyKey)
clustered primary key: ProductionKey + MonthlyKey
现在需要将 MonthlyKey 从主键中移除,并重建以 ProductionKey 为主键,碰到一个问题:
Partition columns for a unique index must be a subset of the index key.
回顾下:
1) 表的存储结构: B (Clustered Index), Heap
2) 索引的存储结构:Clustered, NonClustered.
3) 分区索引: sql server自动将索引按照表分区方式存储; 或者创建索引时指定存储空间。
解决:
Alter table dbo.FctSales Add Constraint Primary Key Clustered (ProductionKey) on (Data);
如此一来,错误信息是没有了,但是表的 Parititon 也从多个变成了一个, 因为 clustered index 页级存储的就是数据本身。
从 sys.parititons 中可以看到原本多条的记录现在变成了 1 条。