我有一个包含超过 1.28 亿行的数据库表。
我必须处理的问题是索引,随着时间的推移,数据库性能非常糟糕,我将其部分归因于索引变得支离 splinter 。大表上的当前索引之一是大约 50% 的总碎片。
重组在 1 小时内完成了大约 1%,因此需要很长时间。
在这么大的表上,重建索引可能需要 5 个小时甚至更多,而且我还没有找到监控进度的真正方法。在如此大的表上重建索引的最佳和最快方法是什么?我应该将数据库设置为“离线”吗?
数据库还运行着一个非常庞大且繁忙的网站,因此我安排了最多 6 小时的停机时间来完成这项工作,但需要尽可能最快和最好的方法来完成这项工作。
我还需要更新数据库中的所有其他索引,但这张表是最难的。
最佳答案
如果您尚未针对此特定指标衡量以下两点,您可能还没有重建的理由。
- 您的查询在重建后立即实际改善了多少(如果有)。
- 改进会持续多长时间(即,您的索引在重建后需要多长时间才能恢复到稳定的 50% 碎片状态。
B-Tree 索引被设计为具有碎片/膨胀/空闲空间。索引通常会迅速恢复到稳定的碎片化状态。他们通常在这种状态下表现不错,往往想回到稳定状态。
关于mysql - 在具有 1.28 亿行的表上重建索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24695342/