Redrock Postgres 搜索 英文
版本: 9.3 / 9.4 / 9.5 / 9.6 / 10 / 11 / 12 / 13 / 14 / 15 / 16 / 17

13.7. 锁定和索引 #

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

B 树GiSTSP-GiST索引

短时间共享/独占页级锁定用于读/写访问。每个索引行被获取或插入之后会立即释放锁定。这些索引类型提供最高并发性,并且没有死锁条件。

哈希索引

共享/独占哈希桶级锁定用于读/写访问。整个哈希桶被处理后才会释放锁定。桶级锁定比索引级锁定提供了更好的并发性,但可能会出现死锁,因为锁定持续时间比一个索引操作的时间长。

GIN索引

短时间共享/独占页级锁定用于读/写访问。每个索引行被获取或插入之后会立即释放锁定。但请注意,插入 GIN 索引的值通常会为每行产生多个索引密钥插入,因此 GIN 可能为单个值的插入执行大量工作。

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