建置 GiST 索引最簡單的方法就是逐一插入所有項目。對於大型索引來說,這往往會很慢,因為如果索引組散布在索引中,而索引又大到無法放入快取中,則需要大量的隨機 I/O。 PostgreSQL 支援兩種 GiST 索引初始建置的替代方法:已排序和已快取模式。
已排序方法僅在索引所使用的每個運算類別提供 sortsupport
函數時才可用,如 第 68.3 節 所述。如果它們有提供,則此方法通常是最佳的,因此預設會使用此方法。
已快取方法的工作原理是不要立即將組插入索引中。它可以大幅減少非順序資料集所需的隨機 I/O 量。對於已排序的資料集,其優點較小或不存在,因為一次只會有一小部分頁面收到新的組,而這些頁面即使整個索引無法放入快取中,也能放入快取中。
已快取方法需要比簡單方法更常呼叫 penalty
函數,這會消耗一些額外的 CPU 資源。此外,快取需要暫時的磁碟空間,大小與結果索引的大小相同。快取也會影響結果索引的品質,無論是正向或負向。這種影響取決於各種因素,例如輸入資料的分配和運算類別實作。
如果無法排序,則預設情況下,當索引大小達到 effective_cache_size 時,GiST 索引建置會切換到快取方法。快取可以透過 CREATE INDEX 命令的 buffering
參數手動強制或阻止。預設行為適用於大多數情況,但如果輸入資料已排序,則關閉快取可能會加快建置速度。
如果您在文件當中看到任何不正確、與您對特定功能的體驗不符,或需要進一步澄清的內容,請使用此表單回報文件問題。