尽管 PostgreSQL 提供了对表数据的非阻塞读写访问,但目前在 PostgreSQL 中实现的每种索引访问方法都不提供非阻塞读写访问。各种索引类型处理如下
短时间共享/独占页面级锁用于读写访问。锁在每个索引行被获取或插入后立即释放。这些索引类型提供最高的并发性,而不会出现死锁情况。
共享/独占哈希桶级锁用于读写访问。在整个桶被处理后,锁被释放。桶级锁比索引级锁提供了更好的并发性,但由于锁的保持时间比单个索引操作长,因此可能发生死锁。
短时间共享/独占页面级锁用于读写访问。锁在每个索引行被获取或插入后立即释放。但请注意,插入一个使用 GIN 索引的值通常会导致每行产生多个索引键插入,因此 GIN 可能会对单个值的插入进行大量工作。
目前,B-tree 索引为并发应用程序提供了最佳性能;由于它们的功能比哈希索引更多,因此它们是需要索引标量数据的并发应用程序推荐的索引类型。当处理非标量数据时,B-tree 索引并不有用,而应该使用 GiST、SP-GiST 或 GIN 索引。
如果您在文档中发现任何不正确的内容,不符合您对特定功能的体验,或需要进一步说明,请使用 此表格 报告文档问题。