本文指在为小白理清MySQL检索引擎InnoDB中数据结构的联系与区别。
InnoDB引擎是MySQL默认数据引擎。存在即合理,默认原因不深究。
)
InnoDB引擎使用主键索引(主索引)进行数据查找,用户也可以指定使用其他非主键索引(辅助索引)。但辅助索引最终仍依赖于主索引来实现查找。
对于主索引,叶子层存放表中所有的数据记录;辅助索引通过关键字找到主键,检索的时候通过主键在主键索引中找到对应数据行。
主键索引是一级索引。
辅助索引是二级索引。
两种索引分别对应两种数据结构,B+树与B-树。
为响应标题中的‘浅谈’,避免枯燥,以下对B+树B-树的特点介绍只定性描述。
B+树是一种多路查找树,InnoDB下使用此数据结构作为主键索引查找及存储数据,或者说,InnoDB的数据文件本身就是主键索引文件,这样的索引被称为聚簇索引,一个表只能有一个聚簇索引。
正是因为主键索引这种数据结构特点,如果用户不指定主键,InnoDB会默认加上一个用户不可见的主键进行索引。
B+树数据结构特点:
1、节点可以重复(不同层).
2、除叶子层外,每层只保留索引特征(主键值及子节点指针),不保存表数据。
3、叶子层是真正放置表数据的容器,叶子节点就是表的主键。
这种特点被称之为聚簇索引。叶子节点存放的是表的行数据。
4、叶子节点之间通过链表链接。
B-树同样是一种多路查找树,但其与B+树的主要区别在于:
1、节点不能重复。
2、每个节点存放的内容包含三部分:
a、主键值。
b、子节点指针。
c、关键字(即行中部分数据)。
3、B-树节点通过关键字查找到主键值,再通过B+树间接找到主键叶子节点存贮的行数据。