2025年9月25日: PostgreSQL 18 釋出!
支援的版本: 當前 (18) / 17 / 16 / 15 / 14 / 13
開發版本: devel
不支援的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3

24.2. 例行重新索引 #

在某些情況下,使用 REINDEX 命令或一系列單獨的重建步驟定期重建索引是值得的。

B-tree 索引中完全為空的頁面會被回收以供重用。然而,仍然可能存在空間使用效率不高的情況:如果一個頁面上的所有索引鍵(除了少數幾個)都被刪除了,該頁面仍然會被分配。因此,如果一個使用模式是最終刪除每個範圍中的大多數鍵,但不是全部,那麼空間使用效率會很低。對於這種使用模式,建議定期重新索引。

非 B-tree 索引的膨脹可能性尚未得到充分研究。在使用任何非 B-tree 索引型別時,定期監控索引的物理大小是一個好主意。

此外,對於 B-tree 索引,一個新構建的索引比一個被多次更新過的索引訪問速度稍快,因為在新的索引中,邏輯上相鄰的頁面通常也物理上相鄰。(這個考慮不適用於非 B-tree 索引。)定期重新索引可能值得,僅僅是為了提高訪問速度。

REINDEX 在所有情況下都可以安全輕鬆地使用。此命令預設需要一個 ACCESS EXCLUSIVE 鎖,因此通常更傾向於使用其 CONCURRENTLY 選項來執行,該選項只需要一個 SHARE UPDATE EXCLUSIVE 鎖。

提交更正

如果您在文件中看到任何不正確的內容,與您對特定功能的實際體驗不符,或者需要進一步澄清,請使用 此表單 報告文件問題。