我已经分配了一项任务来改善表格表格上的数据管理过程(数据归档)就像200gb
我现在正在阅读有关表格分区和最佳实践的内容,据我所知,现在流程就像
-
创建文件组和文件
-
创建分区功能
-
分区方案 - (映射间隔以适应文件组)
-
重新创建聚簇索引 - 这是将表物理移动到另一个文件的时刻
-
利润:)
但目前无法找到一个信息,现有的非聚簇索引是怎么回事?从这里:http://technet.microsoft.com/en-us/library/ms187526(v=sql.105).aspx我找到了
尽管分区索引可以独立于其基表实现,但通常有必要设计分区表,然后在表上创建索引 . 执行此操作时,SQL Server使用与表相同的分区方案和分区列自动分区索引 . 结果,索引的划分方式与表的划分方式基本相同 . 这使索引与表对齐 .
还有一个
分区唯一的非聚簇索引时,索引键必须包含分区列 . 在对非唯一非聚簇索引进行分区时,SQL Server默认将分区列添加为索引的非键(包含)列,以确保索引与基表对齐 . 如果索引中已存在分区列,则SQL Server不会将分区列添加到索引中 .
但是这个引用没有一个我的问题我是否必须为现有的非聚集索引显式创建分区函数,这些索引在它们的定义中没有/没有分区列?
让我们说我们有 table
表A - col1 col2 col3
col1上的聚簇索引和PRIMARY分区上的col 3上的非聚簇索引
分区后col3上的非聚集索引会发生什么,它是否会与表对齐或仍然驻留在PRIMARY分区上
2 回答
您应该对齐索引 . 有两个主要力量将你拉向这个方向:
快速分区交换机操作需要对齐的索引 . 处理大型数据集时,删除过时数据(已超过所需保留期的数据)与添加新数据同样重要 . 分区切换操作是迄今为止删除旧数据的最有效方法 . 见How to Implement an Automatic Sliding Window in a Partitioned Table
查询处理器喜欢对齐的索引并且讨厌未对齐的索引 . 例如,见Memory Limitations and Partitioned Indexes:
在您的情况下,这意味着显式地将分区列添加到每个非聚集索引,并在与基表(聚集索引)相同的分区方案上声明每个非聚集索引 . 不要尝试为非聚集索引创建不同的分区函数/方案 . 将分区列添加到每个索引会对数据模型产生深远的影响,例如 . 您将无法再声明不包含分区列的主键约束(并且这会引起所有引用分区表的外键定义!)但这是您在接受分区时已经购买的价格解决方案,见How To Decide if You Should Use Table Partitioning .
一般来说,您通常会删除所有非聚簇索引,并在新方案上重新创建它们 . 这将以与聚簇索引(和行数据)类似的方式将它们分布在表格parititions中 .
如果你不这样做,他们将被留在原始文件组(主要或任何地方)