我有一张桌子,在我看来会受益于分区:
CREATE TABLE [dbo].[my_table](
[id] [int] IDENTITY(1,1) NOT NULL,
[external_id] [int] NOT NULL,
[amount] [money] NOT NULL,
PRIMARY KEY CLUSTERED ([id] ASC));
每个人只有少数不同的external_id
和数千条记录
SSMS创建分区向导生成一个我不完全理解的脚本。创建分区功能和分区模式后,
- 下降主键,
- 然后在id
上再次创建主键,这次是非群集,
- 然后在新创建的分区模式上的external_id
上创建聚簇索引,
- 最后它删除了在上一步创建的聚集索引。
除了最后一步之外的所有内容似乎都很清楚,但我无法理解为什么它必须删除聚集索引。我应该从批次中删除最后一步吗?
非常感谢任何帮助。
答案 0 :(得分:1)
这很有道理。
分区键将成为外部ID,因此聚簇索引必须包含该内容。
它保留非聚集索引中的主键 - 因为它位于ID而不是external_id
它在external_id上创建了聚簇索引,以便将数据物理地移动到分区方案中。
它删除了聚簇索引,因为它只用它来移动数据 - 它不是以前指定的索引。
有很多选择,假设你总是知道external_id,那么你可以选择创建聚簇索引为(id,external_id) - 用于表的分区模式/函数字段必须在聚簇索引中分区架构。
性能方面,这不会是一个巨大的提升,使用它更多的是你可以轻松地删除整个external_id,而不是大型的删除事务。