运行脚本并定期在当前架构下重建所有索引(例如每周或每天),它是否可靠且健康?它是否有可能导致数据问题或使系统冗余?我们可以信任索引重建查询吗?
alter index SYS_C0078275 rebuild;
alter index SHOPPER_ID rebuild;
答案 0 :(得分:3)
通常,不需要在Oracle中重建索引。通常,您正在做的是为数据库带来额外的工作,并且(除非您已经获得企业版并正在进行在线重建)为您的应用程序带来额外的停机时间。对于具有大量随机插入(例如名称)的列的索引,您可以采用处于良好稳定状态的索引,执行大量工作来压缩它,仅针对Oracle在下一个中执行大量工作一周分裂一堆块以恢复到稳定状态。此外,还有一项工作需要进行监控,可能会失败,等等。一般来说,上升空间很小(涉及对索引进行全面扫描的查询可能会稍微加快一段时间)和批次潜在的缺点所以我不建议这样做。
尽管如此,很多网站都会定期对重建进行索引。如果您已经有一个停机时间窗口来进行重建,那么性能下降可能不会造成严重问题。您可能有一个罕见的系统,其中有一个或两个索引实际上受益于定期重建(尽管您更有可能想要解决导致索引需要重建的基础问题)在这种情况下,重建一切可能是有益的,即使它是过度的。
关于索引重建的规范性讨论是Richard Foote的Rebuilding the Truth。如果你想进行更详细的讨论,那就是你想去的地方。