postgreSQL的索引

postgreSQL的索引主要有如下几类:B-tree、Hash、GIN、GiST、SP-GiST、BRIN。每个索引都有特定的算法来匹配不同的类型数据的查询。

B-tree

       索引可以应用于等值和范围查询,例如:<,<=,=,>=,>, betwee, in, is null,还有like模糊查询、排序。B-tree适合大多数数据类型,是默认创建使用的索引。

Hash

hash索引存储的是被索引字段VALUE的哈希值,只支持等值查询。
hash索引特别适用于字段VALUE非常长(不适合b-tree索引,因为b-tree一个PAGE至少要存储3个ENTRY,所以不支持特别长的VALUE)的场景,例如很长的字符串,并且用户只需要等值搜索,建议使用hash index。

GIN

gin是倒排索引,非常适合全文检索或者包含多个关键字的数组。如jsonb格式的字段就可以使用gin索引

GIST

GiST索引不是一种单独的索引类型,而是一种架构,可以在该架构上实现很多不同的索引策略。从而可以使GiST索引根据不同的索引策略,而使用特定的操作符类型。
索引适用于像like '%foo';的模糊查询,如create extension if not exists pg_trgm; CREATE INDEX trgm_idx ON test_trgm USING GIST (t gist_trgm_ops);

BRIN 块级索引

       关键字:索引占用空间小,物理上连续的存储时查询很快。

       Block Range Index的简称,适用块的区域搜索,即物理位置是相邻的。BRIN 索引是块级索引,可以很好的解决空间问题。有别于B-TREE等索引,BRIN记录并不是以行号为单位记录索引明细,而是记录每个数据块或者每段连续的数据块的统计信息,如会保存128个块(默认)数据(1MB)的最小和最大值。因此BRIN索引空间占用特别的小,对数据写入、更新、删除的影响也很小。
       BRIN属于LOSSLY索引,当被索引列的值与物理存储相关性很强时,例如在时间或序列字段创建BRIN索引,通过BRIN索引进行等值、范围查询时效果很棒。如设备上报的事件,按时间顺序排列并插入,一段时间内的事件记录存储的物理位置是相邻的,因此查询一段时间内的事件,效率很高。

       如果物理位置不相邻,可以使用如下命令整理CLUSTER [VERBOSE] table_name [ USING index_name ]

你可能感兴趣的:(数据库,postgres索引,gin索引,brin索引)