2024年9月26日: PostgreSQL 17 发布!
支持的版本:当前 (17) / 16 / 15 / 14 / 13 / 12
开发版本:devel
不受支持的版本: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 / 7.2

13.7. 锁定和索引 #

尽管 PostgreSQL 提供了对表数据的非阻塞读写访问,但目前在 PostgreSQL 中实现的每种索引访问方法都不提供非阻塞读写访问。各种索引类型处理如下

B-tree,GiSTSP-GiST索引

短时间共享/独占页面级锁用于读写访问。锁在每个索引行被获取或插入后立即释放。这些索引类型提供最高的并发性,而不会出现死锁情况。

哈希索引

共享/独占哈希桶级锁用于读写访问。在整个桶被处理后,锁被释放。桶级锁比索引级锁提供了更好的并发性,但由于锁的保持时间比单个索引操作长,因此可能发生死锁。

GIN索引

短时间共享/独占页面级锁用于读写访问。锁在每个索引行被获取或插入后立即释放。但请注意,插入一个使用 GIN 索引的值通常会导致每行产生多个索引键插入,因此 GIN 可能会对单个值的插入进行大量工作。

目前,B-tree 索引为并发应用程序提供了最佳性能;由于它们的功能比哈希索引更多,因此它们是需要索引标量数据的并发应用程序推荐的索引类型。当处理非标量数据时,B-tree 索引并不有用,而应该使用 GiST、SP-GiST 或 GIN 索引。

提交更正

如果您在文档中发现任何不正确的内容,不符合您对特定功能的体验,或需要进一步说明,请使用 此表格 报告文档问题。