介绍了三种single-level indexes: primary index, clustering index 和 secondary index, 以及multi-level index
第一次学 分享自己的理解 有不对的地方还望指正


目录

  • 索引 index
  • Single-Level Indexes
  • Primary Index
  • Clustering Index
  • Secondary Index
  • 小结
  • Multi-Level Index
  • 一点点B tree / B+ tree


索引 index

数据库里有很多文件,要想查找某个文件中的某一条record,遍历一遍查找肯定太慢了,所以现在建立索引来加速查找。索引很像字典的目录,而且字典往往有按拼音查找和按部首查找,也就是有很多查找方法。索引往往需要建立在排好序的文件上,否则的话就会占很多空间去建立索引。

Single-Level Indexes

Primary Index

Primary index 建立在按主键排好序的文件上,比如学生的学号。因为数据是存在一个个block中,为了减少访问block的次数,存储每个block中第一个或最后一条record的主键信息作为索引。
用字典(英文)打比方,每个单词都是独一无二的(主键),可以建立索引。有些字典的侧面能看到,整个书被均匀分成了很多块,很容易直接翻到每一块的第一页。只要二分的查看每一块的第一个单词,就能很快的找到目标。

Clustering Index

Clustering index 建立在按非主键归好类的文件上,比如学生的班级号(同一个班的多个学生共用一个班号)。这时index指向每一个cluster的一个的record的地址,如果一个cluster跨越多个block,那么在每一个block最后指向下一个block。
用字典(中文)打比方,同一个拼音下有很多个汉字,所以把每个拼音看做一个cluster。找到汉字对应的拼音cluster之后,再一个个的查找汉字。

Secondary Index

Secondary index 建立在按主键排好序,但想要根据没被排序的键值查找record的文件上。也就像secondary这个词的意思,已经有的index是我们不想用的,所以要建立第二个index。但因为我们想查找的键可能存在多个,也就是,不一定是主键或者别的键,有时可能会对每一个record都建立索引,也就是dense index。
再用字典(中文)举例子,按偏旁部首查字的时候,会根据偏旁把所有字和其对应的页码都列出来。这里有两种实现形式:因为汉字还是挺多的,但偏旁部首是共用的。所以先按偏旁分个类,剩下不好描述的部分再一一列举。这样如果想要找所有单人旁的字,就能一下找出来(可能会帮助小学生写作业)。这其实有点像前面的clustering index,其实就是没按cluster归类(排序)的clustering index。另一种情况,就是所有record几乎没有共同之处,那就需要对每一个record都建立索引。

小结

Secondary index 弥补了 primary index 和 clustering index 的不足。

Multi-Level Index

假设已经建立了single-level index,但可能同时又有很多很多single-level index。所以对index 建立的 index, 就叫multi-level index。这样重复可以建立很多index。

一点点B tree / B+ tree

既然要建立很多multi-level index 来加快找index的速度,不如在这个过程中也采用一些数据结构来加速multi-level index的查找,那就是用B tree 或 B+ tree。这里就先不多说了。