分区大表 - 索引

时间:2012-08-07 07:58:18

标签: sql-server tsql indexing partitioning

我已经分配了一项任务来改进表格中的数据管理过程(数据归档) 表就像200gb

我正在阅读有关表格分区和最佳做法的内容 而据我所知,这个过程就像

  • 创建文件组和文件
  • 创建分区功能
  • 分区方案 - (映射间隔以适应文件组)
  • 重新创建聚簇索引 - 这是将表物理移动到另一个文件的时刻
  • 利润:)

但无法找到一个信息 此时现有的非聚簇索引发生了什么? 从这里开始:http://technet.microsoft.com/en-us/library/ms187526(v=sql.105).aspx 我找到了

  

虽然分区索引可以独立于其基表实现,但通常有必要设计分区表,然后在表上创建索引。执行此操作时,SQL Server使用与表相同的分区方案和分区列自动分区索引。结果,索引的划分方式与表的划分方式基本相同。这使索引与表对齐。

和另一个

  

分区唯一的非聚簇索引时,索引键必须包含分区列。在对非唯一非聚簇索引进行分区时,SQL Server默认将分区列添加为索引的非键(包含)列,以确保索引与基表对齐。如果索引中已存在分区列,则SQL Server不会将分区列添加到索引中。

但这些都没有引用我的问题 我是否必须为现有的非聚集索引显式创建分区函数,这些索引在其定义中是否包含分区列?

假设我们有像

这样的表格

表A - col1 col2 col3

在col1上使用聚簇索引 并且非聚集在第3列 在PRIMARY分区

分区后col3上的非聚集索引会发生什么,它是否会与表对齐或仍然驻留在PRIMARY分区

2 个答案:

答案 0 :(得分:3)

您应该对齐索引。有两种主要力量可以帮助你实现这个目标:

  

对于对齐和非对齐索引,内存要求可以是   如果SQL Server正在对构建应用并行度,则更大   在多处理器计算机上操作。这是因为更大   并行度,内存需求越大。对于   例如,如果SQL Server将并行度设置为4,则为非对齐   具有100个分区的分区索引需要足够的内存   四个处理器可同时对4,000页进行排序,即16,000页。   如果对齐分区索引,则会降低内存要求   分为40页或160(4 * 40)页的四个处理器。

在您的情况下,这意味着将分区列显式添加到每个非聚集索引,并在与基表(聚集索引)相同的分区方案上声明每个非聚簇索引。不要尝试为非聚集索引创建不同的分区函数/方案。将分区列添加到每个索引会对数据模型产生深远的影响,例如。您将无法再声明包含分区列的主键约束(并且这会引起所有引用分区表的外键定义!)但这是您的价格>当您接受分区作为解决方案时,已经购买,请参阅How To Decide if You Should Use Table Partitioning

答案 1 :(得分:2)

一般来说,您通常会删除所有非聚簇索引,并在新方案上重新创建它们。这将以与聚簇索引(和行数据)类似的方式将它们分布在表格parititions中。

如果你不这样做,他们将被留在原始文件组(主要或任何地方)