我已经分配了一项任务来改进表格中的数据管理过程(数据归档) 表就像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分区
答案 0 :(得分:3)
您应该对齐索引。有两种主要力量可以帮助你实现这个目标:
快速分区切换操作需要对齐的索引。处理大型数据集时,删除过时数据(已超过所需保留期的数据)与添加新数据同样重要。分区切换操作是迄今为止删除旧数据的最有效方法。请参阅How to Implement an Automatic Sliding Window in a Partitioned Table
查询处理器喜欢对齐的索引并且讨厌未对齐的索引。例如,请参阅Memory Limitations and Partitioned Indexes:
对于对齐和非对齐索引,内存要求可以是 如果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中。
如果你不这样做,他们将被留在原始文件组(主要或任何地方)