Ama*_*mam 6 index sql-server-2008-r2 partitioning
我有一个包含超过 10 亿条记录的表,它有 6 个索引(包括聚集索引 (ID))。我需要在带有日期列的新聚集索引上对该表进行分区。我在 ldf 文件中有足够的空间 (150gb) 在索引重建的情况下增长(tempdb 关闭)。
请帮助我以一种有效的方式在新的分区功能/方案上重建索引。这两种方法中的哪一种是一种高效且资源消耗较少的方式(或推荐任何其他方法)?
1.
2.
谢谢
现在,回答这个问题的最佳方法是建立一个较小的几 GB 测试数据库。它将准确预测最佳技术。
您的技术 (2) 很糟糕,因为步骤 1 导致所有 NCI 都被重建以与生成的堆表一起工作。不要那样做。
好消息是DROP_EXISTING
可以更改索引定义,包括列和分区方案:
现有索引被删除并重建。指定的索引名称必须与当前存在的索引相同;但是,可以修改索引定义。例如,您可以指定不同的列、排序顺序、分区方案或索引选项。
这就是这个功能存在的原因。它不等于先丢弃,然后再创建。
以下是基本技术(由于中间堆表,您的所有技术都很糟糕):
WITH (DROP_EXISTING = ON)
、创建丢失的 NCIWITH (DROP_EXISTING = ON)
,创建缺失的 NCIWITH (DROP_EXISTING = ON)
(1)事务日志非常轻。它没有达到最大效率。(3) 是最简单的 - 它将导致所有索引被重建为对齐索引。这不太好,因为您将不得不重建那些您不想对齐的内容。
(2) 可能在所有情况下都是最好的。我想不出任何情况可能会更糟。它的优点是重用现有索引以进行更有效的重建(这是可能的,因为您不只是删除所有 NCI)。您想要不对齐的 NCI 不会从这种方法中受益,并且会被不必要地重建。因此,在开始手术之前先将它们除去。
所有这些实际上都可以在线运行,尽管您说您不需要它。
同样,只需在示例数据库上尝试一下即可。当然,您不应该将数据库的可用性托付给我的建议。我建议您借鉴这篇文章中的想法并尝试一下。
归档时间: |
|
查看次数: |
2065 次 |
最近记录: |