在表上重建索引,有1.28亿行

时间:2014-07-11 10:13:04

标签: mysql sql sql-server indexing rebuild

我有一个超过1.28亿行的数据库表。

我必须处理的问题是索引,数据库随着时间的推移表现非常糟糕,我将其部分归结为索引变得支离破碎。大表上当前的一个索引是大约50%的总碎片。

重组在1小时内完成了大约1%,因此需要花费太长时间。

在这么大的桌子上,如果不是更多,重新索引可能需要5个小时,而且我还没有找到一种监控进度的真正方法。在这么大的表上重建索引的最佳和最快方法是什么?我应该将数据库设置为" OFFLINE" ?

该数据库还运行一个非常庞大且繁忙的网站,因此我计划完成最多6小时的停机时间,但需要以最快和最好的方式执行此操作。

我还需要更新数据库上的所有其他索引,但这个表是最难的。

1 个答案:

答案 0 :(得分:3)

如果你没有在这个特定索引上测量以下两件事,你可能还没有理由重建。

  1. 重建后,您的查询实际上有多少(如果有)。
  2. 改进持续多长时间(即,重建后您的索引恢复到50%碎片的稳定状态需要多长时间。
  3. B-Tree索引设计为具有碎片/膨胀/自由空间。索引通常会迅速恢复到稳定的碎片状态。他们通常在这种状态下表现得体面,往往希望恢复稳定状态。