MySQL数据库学习之跟着掘金手册学-个人笔记与总结[6]-B+树索引的使用

一、对上一章的复习摘要

  • 每个索引都对应一棵B+树, B+树分为好多层,最下边一层是叶子节点,其余的是内节点。
    所有用户记录都存储在B+树的叶子节点,所有目录项记录都存储在内节点。 每个页对应一个目录项**,每个目录项包括下边两个部分:
    (1)页的用户记录中最小的主键值key
    (2)页号page_no。

MySQL数据库学习之跟着掘金手册学-个人笔记与总结[6]-B+树索引的使用

  • B+树中每层节点都是按照索引列值从小到大的顺序排序而组成了双向链表,而且每个页内的记录(不论是用户记录还是目录项记录)都是按照索引列的值从小到大的顺序而形成了一个单链表。如果是联合索引的话,则页面和记录先按照联合索引前边的列排序,如果该列值相同,再按照联合索引后边的列排序。

  • 通过索引查找记录是从B+树的根节点开始,一层一层向下搜索。由于每个页面都按照索引列的值建立了Page Directory(页目录),所以在这些页面中的查找非常快。

  • 聚簇索引:
    这样的 B+树本身就是一个目录,或者说本身就是一个索引。它有两个特点:
    (1)使用记录主键值的大小进行记录和页的排序,这包括三个方面的
    (2)B+树的叶子节点存储的是完整的用户记录。(存储了所有列的值,包括隐藏列)。
    把具有这两种特性的B+树称为“聚簇索引”。

InnoDB存储引擎会自动为主键(如果没有它会自动帮我们添加UNIQUE)建立聚簇索引,聚簇索引的叶子节点包含完整的用户记录。

  • 我们可以为自己感兴趣的列建立二级索引,二级索引的叶子节点包含的用户记录由索引列 + 主键组成,所以如果想通过二级索引来查找完整的用户记录的话,需要通过回表操作,也就是在通过二级索引找到主键值之后再到聚簇索引中查找完整的用户记录。