首页 文章

分区大表 - 索引

提问于
浏览
4

我已经分配了一项任务来改善表格表格上的数据管理过程(数据归档)就像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 回答

  • 3

    您应该对齐索引 . 有两个主要力量将你拉向这个方向:

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

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

  • 2

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

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

相关问题