12.5. 鎖和索引

儘管 PostgreSQL 提供對資料表資料訪問的非阻塞的讀/寫,但並非所有 PostgreSQL 裡實現的索引訪問模式都能夠進行非阻塞讀/寫。 不同的索引類型按照下面方法操作︰

B-tree 索引

短期的共享/排他的頁面級的銷用於讀/寫訪問。 銷在索引行被插入/抓取後立即釋放。 B-tree 索引提供了無死鎖條件的最高級的並行性。

GiST 和 R-Tree 索引

共享/排他的頁面級鎖用於讀/寫訪問。鎖在命令處理完成後釋放。

Hash (散列)索引

共享/排他的散列桶級鎖用於讀/寫訪問。鎖在整個散列桶處理完成後釋放。 散列桶級鎖比索引級的鎖提供了更好的並行性但是可能產生死鎖,因為鎖持有的時間比一次索引操作時間長。

簡單說,B-tree 索引是我們推薦的用於並行應用的索引類型; 因為它們還有比散列索引更多的特性,在那些需要對標量資料進行索引的應用中,我們建議使用這種索引類型。 在處理非標量類型資料的時候,顯然不能使用 B-tree;在這種環境下, 應用開發人員應該清醒意識到 GiST 和 R-tree 索引的相對弱的並發性能。