在SQL Server 2008中对非分区表进行分区

时间:2011-05-26 23:12:43

标签: sql-server-2008 partitioning


我有一张桌子,在我看来会受益于分区:

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上创建聚簇索引,
- 最后它删除了在上一步创建的聚集索引。

除了最后一步之外的所有内容似乎都很清楚,但我无法理解为什么它必须删除聚集索引。我应该从批次中删除最后一步吗?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

这很有道理。

分区键将成为外部ID,因此聚簇索引必须包含该内容。

它保留非聚集索引中的主键 - 因为它位于ID而不是external_id

它在external_id上创建了聚簇索引,以便将数据物理地移动到分区方案中。

它删除了聚簇索引,因为它只用它来移动数据 - 它不是以前指定的索引。

有很多选择,假设你总是知道external_id,那么你可以选择创建聚簇索引为(id,external_id) - 用于表的分区模式/函数字段必须在聚簇索引中分区架构。

性能方面,这不会是一个巨大的提升,使用它更多的是你可以轻松地删除整个external_id,而不是大型的删除事务。