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);