15.pgsql索引类型(btree、hash、GIST、GIN)

pgsql索引类型

PostgreSQL 提供了好几种索引类型:B-tree, Hash, GiST, GIN 。每种索引类型都比较适合某些特定的查询类型,因为它们用了不同的算法。缺省时,CREATE INDEX 命令将创建一个 B-tree 索引,它适合大多数情况。

1.B-tree索引

B-tree 适合处理那些能够按顺序存储的数据之上的等于和范围查询。特别是在一个建立了索引的字段涉及到使用

<
<=
=
>=
>

操作符之一进行比较的时候,PostgreSQL 的查询规划器都会考虑使用 B-tree 索引。等效于这些操作符组合的构造,比如 BETWEEN 和 IN ,也可以用搜索 B-tree 索引实现。但是要注意,IS NULL 不同于 = 并且是不能建立索引的。

 

仅当模式是一个常量,并且锚定在字符串开头的时候,优化器才会把 B-tree 索引用于模式匹配操作符 LIKE 和 ~ ,比如:col LIKE 'foo%' 或 col ~ '^foo' (这里的~和like差不多,差别在于~后面放的正则,^表示匹配输入字符串的开始位置),但是 col LIKE '%bar' 就不行。同时,如果你的服务器未使用 C 区域设置,那么你需要用一个特殊的操作符类创建索引来支持模式匹配查询上的索引。参阅节11.8。还有可能将 B-tree 索引用于 ILIKE 和 ~* ,但是仅当模式以非字母字符(不受大小写影响的字符)开头才可以。

2.Hash 索引

Hash 索引只能处理简单的等于比较。当一个索引了的列涉及到使用 = 操作符进行比较的时候,查询规划器会考虑使用 Hash 索引。下面的命令用于创建 Hash 索引:

CREATE INDEX name ON table USING hash (column);

【注意】测试表明,PostgreSQL 的 Hash 索引的性能不比 B-tree 索引强,而 Hash 索引的尺寸和制作时间更差。另外,Hash 索引操作目前没有记录 WAL 日志,因此如果发生了数据库崩溃,我们可能需要用 REINDEX 重建 Hash 索引。因为这些原因,我们并不鼓励使用 Hash 索引(官放不建议使用还是可以的)。

3. GiST 索引(Generalized Search Tree-通用的搜索树)

3.1介绍

GiST 的意思是通用的搜索树(Generalized Search Tree)。。它是一种平衡树结构的访问方法,在系统中起一个基础的模版,然后可以使用它实现任意索引模式。B-trees 和许多其它的索引模式都可以用 GiST 实现。

GiST 的一个优点是它允许一种自定义的数据类型和合适的访问方法一起开发,并且是由该数据类型范畴里的专家,而不是数据库专家开发。

GiST 索引不是单独一种索引类型,而是一种架构,可以在这种架构上实现很多不同的索引策略。因此,可以使用 GiST 索引的特定操作符类型高度依赖于索引策略(操作符类)。作为示例,PostgreSQL 的标准发布中包含用于二维几何数据类型的 GiST 操作符类,它支持

下面的几何操作符:看起来复杂,但是一旦用到确实必不可少,知道哪里查就行了。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值