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 / 7.2

13.7. 锁定和索引 #

虽然 PostgreSQL 提供了对表数据的非阻塞读/写访问,但并非 PostgreSQL 中实现的每种索引访问方法都提供非阻塞读/写访问。各种索引类型的处理方式如下:

B-tree,GiSTSP-GiST索引

读/写访问使用短时共享/排他页级锁。在获取或插入每一行索引后,锁会立即释放。这些索引类型在没有死锁条件的情况下提供最高的并发性。

哈希索引

读/写访问使用共享/排他哈希桶级锁。在处理完整个桶后,锁会释放。桶级锁比索引级锁提供更好的并发性,但由于锁的持有时间超过一个索引操作,因此可能发生死锁。

GIN索引

读/写访问使用短时共享/排他页级锁。在获取或插入每一行索引后,锁会立即释放。但请注意,插入 GIN 索引值通常会为每行生成多个索引键插入,因此 GIN 对单个值的插入可能会执行大量工作。

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

提交更正

如果您在文档中发现任何不正确、与您使用特定功能时的体验不符或需要进一步澄清的内容,请使用此表单报告文档问题。