【PostgreSQL】Btree\Hash\BitMap\Gin\GiST\SP-GiST索引

定义

索引:索引是帮助数据库高效获取数据的数据结构

索引的分类

1、从存储结构上来划分:BTree索引(B-Tree或B+Tree索引),Hash索引,full-index全文索引,R-Tree索引。这里所描述的是索引存储时保存的形式,

2、从应用层次来分:普通索引,唯一索引,复合索引

3、根据中数据的物理顺序与键值的逻辑(索引)顺序关系:聚集索引,非聚集索引。

1.Btree

图片来源及参考:https://blog.csdn.net/hao65103940/article/details/89032538

(1)B+Tree

是B-Tree的改进版本,同时也是数据库索引索引所采用的存储结构。数据都在叶子节点上,并且增加了顺序访问指针,每个叶子节点都指向相邻的叶子节点的地址。相比B-Tree来说,进行范围查找时只需要查找两个节点,进行遍历即可。而B-Tree需要获取所有节点,相比之下B+Tree效率更高。

B+Tree相对于B-Tree有几点不同:

  • 非叶子节点只存储键值信息。
  • 所有叶子节点之间都有一个链指针。
  • 数据记录都存放在叶子节点中。
    在这里插入图片描述

(2)B-Tree

B-Tree是为磁盘等外存储设备设计的一种平衡查找树。
B-Tree结构的数据可以让系统高效的找到数据所在的磁盘块。
B-Tree中的每个节点根据实际情况可以包含大量的关键字信息和分支。
缺点:B-Tree每个节点都保存数据,导致非叶子节点中能保存数据的指针变少(称为扇出),指针少又要保存大量数据则只能增加树的高度,IO操作变多,查询性能降低。
在这里插入图片描述

2.Hash

基于哈希表实现,只有精确匹配索引所有列的查询才有效,对于每一行数据,存储引擎都会对所有的索引列计算一个哈希码(hash code),并且Hash索引将所有的哈希码存储在索引中,同时在索引表中保存指向每个数据行的指针。

静态哈希与动态哈希:点我直达
https://blog.csdn.net/weixin_43378396/article/details/90447750

在这里插入图片描述

3.bitmap

位图(bitmap)索引是另外一种索引类型,它的组织形式与B树索引相同,也是一棵平衡树。与B树索引的区别在于叶子节点里存放索引条目的方式不同。从前面我们知道,B树索引的叶子节点里,对于表里的每个数据行,如果被索引列的值不为空的,则会为该记录行在叶子节点里维护一个对应的索引条目。
位图索引适合只有几个固定值的列,如性别、婚姻状况、行政区等等,而身份证号这种类型不适合用位图索引。

当发出where c1=’01’这样的SQL语句时,oracle会去搜索01所在的索引条目,然后扫描该索引条目中的bitmap里所有的bit位。第一个bit位为1,则说明第一条记录上的C1值为01,于是返回第一条记录所在的ROWID(根据该索引条目里记录的start ROWID加上行号得到该记录所在的ROWID)。第二个bit位为0,则说明第二条记录上的C1值不为01,依此类推。另外,如果索引列为空,也会在位图索引里记录,也就是将对应的bit位设置为0即可。
在这里插入图片描述

4.gin

gin 索引是"倒排索引",它适合于包含多个组成值的数据值,例如数组。

倒排索引中为每一个组成值都包含一个单独的项,它可以高效地处理测试指定组成值是否存在的查询。

简单的说就是 gin 索引接口常被用于多值列的检索,例如全文检索类型、数组类型。
在这里插入图片描述

5.GiST

GiST的意思是通用的搜索树(Generalized Search Tree)。 它是一种平衡树结构的访问方法,在系统中作为一个基本模版,可以使用它实现任意索引模式。B-trees, R-trees和许多其它的索引模式都可以用GiST实现。
GiST是一种平衡树的数据结构,它的关键在于key是可以定制的,例如R-tree本身的key是整数型,而实现了R-tree的GiST的key是外包矩形(Bounding Box)。
原理:Gist原理https://blog.csdn.net/qingyafan/article/details/86694121#GiST%E5%8E%9F%E7%90%86

与Btree索引比较的优缺点:

优点:

Gist索引适用于多维数据类型和集合数据类型,和Btree索引类似,同样适用于其他的数据类型。和Btree索引相比,Gist多字段索引在查询条件中包含索引字段的任何子集都会使用索引扫描,而Btree索引只有查询条件包含第一个索引字段才会使用索引扫描。

缺点:

Gist索引创建耗时较长,占用空间也比较大。

6.SP-GiST

详情
SP-Gist和Gist类似,
«SP»是space partitioning(空间划分)。这里的空间通常就是我们通常所说的空间,例如,二维平面。
SP-GiST适用于空间被递归划分为非相交区域的结构。此类包括四叉树,k维树(k-D树)和基数树。

猜你喜欢

转载自blog.csdn.net/qq_42158942/article/details/107763684