支持的版本:当前 (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 树GiSTSP-GiST索引

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

哈希索引

使用共享/独占哈希桶级锁进行读/写访问。在处理完整个桶后,锁会被释放。桶级锁提供的并发性比索引级锁更好,但由于锁的持有时间比一次索引操作长,因此可能会出现死锁。

GIN索引

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

目前,对于并发应用程序,B 树索引提供最佳性能;由于它们还比哈希索引具有更多功能,因此对于需要索引标量数据的并发应用程序,建议使用 B 树索引类型。在处理非标量数据时,B 树不起作用,应该使用 GiST、SP-GiST 或 GIN 索引。

提交更正

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