专栏名称: Linux中国
十万级技术订阅号,依托于『Linux中国』(https://linux.cn/)社区,专注于 Linux 学习、技术研究、开源思想传播。
目录
相关文章推荐
Linux就该这么学  ·  面试被问 Linux su 和 sudo ... ·  11 小时前  
Linux就该这么学  ·  一款超实用的 Docker ... ·  11 小时前  
Linux就该这么学  ·  自己工资14K,找到月薪28K工作后,开心地 ... ·  昨天  
Linux就该这么学  ·  Linux 运维频繁使用的 10 ... ·  昨天  
Linux就该这么学  ·  平替 Navicat ?开源 12 ... ·  2 天前  
51好读  ›  专栏  ›  Linux中国

Postgres 索引类型探索之旅

Linux中国  · 公众号  · linux  · 2017-11-07 12:37

正文

请到「今天看啥」查看全文


空间分区的 Space partitioned GiST (SP-GiST)
块范围索引 Block Range Index (BRIN)
◈ Hash

现在开始介绍索引。

在 Postgres 中,B-Tree 索引是你使用的最普遍的索引

如果你有一个计算机科学的学位,那么 B-Tree 索引可能是你学会的第一个索引。 B-tree 索引 [4] 会创建一个始终保持自身平衡的一棵树。当它根据索引去查找某个东西时,它会遍历这棵树去找到键,然后返回你要查找的数据。使用索引是大大快于顺序扫描的,因为相对于顺序扫描成千上万的记录,它可以仅需要读几个 [5] (当你仅返回几个记录时)。

如果你运行一个标准的 CREATE INDEX 语句,它将为你创建一个 B-tree 索引。 B-tree 索引在大多数的数据类型上是很有价值的,比如文本、数字和时间戳。如果你刚开始在你的数据库中使用索引,并且不在你的数据库上使用太多的 Postgres 的高级特性,使用标准的 B-Tree 索引可能是你最好的选择。

GIN 索引,用于多值列

倒排索引 Generalized Inverted Index ,一般称为 GIN [6] ,大多适用于当单个列中包含多个值的数据类型。

据 Postgres 文档:

“GIN 设计用于处理被索引的条目是复合值的情况,并且由索引处理的查询需要搜索在复合条目中出现的值。例如,这个条目可能是文档,查询可以搜索文档中包含的指定字符。”

包含在这个范围内的最常见的数据类型有:

hStore [7]
◈ Array
◈ Range
JSONB [7]

关于 GIN 索引中最让人满意的一件事是,它们能够理解存储在复合值中的数据。但是,因为一个 GIN 索引需要有每个被添加的单独类型的数据结构的特定知识,因此,GIN 索引并不是支持所有的数据类型。

GiST 索引, 用于有重叠值的行

倒排搜索树 Generalized Inverted Seach Tree (GiST)索引多适用于当你的数据与同一列的其它行数据重叠时。GiST 索引最好的用处是:如果你声明一个几何数据类型,并且你希望知道两个多边型是否包含一些点时。在一种情况中一个特定的点可能被包含在一个盒子中,而与此同时,其它的点仅存在于一个多边形中。使用 GiST 索引的常见数据类型有:







请到「今天看啥」查看全文