开放的索引接口,使得PG支持非常丰富的索引方法,例如btree , hash , gin , gist , sp-gist , brin , bloom , rum , bitmap .
用户可以根据不同的数据类型,以及查询的场景,选择不同的索引。
1. b-tree适合所有的数据类型,支持排序,支持大于、小于、等于、大于或等于、小于或等于的搜索。
索引与递归查询结合,还能实现快速的稀疏检索.
2. hash索引存储的是被索引字段VALUE的哈希值,只支持等值查询。
hash索引特别适用于字段VALUE非常长(不适合b-tree索引,因为b-tree一个PAGE至少要存储3个ENTRY,所以不支持特别长的VALUE)的场景,例如很长的字符串,并且用户只需要等值搜索,建议使用hash index。
3. gin是倒排索引,存储被索引字段的VALUE或VALUE的元素,以及行号的list或tree。
4. GiST是一个通用的索引接口,可以使用GiST实现b-tree, r-tree等索引结构。
不同的类型,支持的索引检索也各不一样。例如:
# 几何类型,支持位置搜索(包含、相交、在上下左右等),按距离排序。
# 范围类型,支持位置搜索(包含、相交、在左右等)。
# IP类型,支持位置搜索(包含、相交、在左右等)。
# 空间类型(PostGIS),支持位置搜索(包含、相交、在上下左右等ÿ