B+树本身就是一个目录,或者说本身就是一个索引。
两个特点 1.使用记录主键值的大小进行记录和页的排序,这包括三个方面的含义:
页内的记录是按照主键的大小顺序排成一个单向链表。各个存放用户记录的页也是根据页中用户记录的主键大小顺序排成一个双向链表。存放目录项记录的页分为不同的层次,在同一层次中的页也是根据页中目录项记录的主键大小顺序排成一个双向链表。2.B+树的叶子节点存储的是完整的用户记录。所谓完整的用户记录,就是指这个记录中存储了所有列的值(包括隐藏列)。 根据主键值查找一条用户记录大致需要3个步骤 1.确定目录项记录页
2.通过目录项记录页确定用户记录真实所在的页。
3.在真实存储用户记录的页中定位到具体的记录。 以下为b+树索引结构: 二级索引
二级索引结构: 二级索引与聚簇索引的不同 1.使用记录c2列的大小进行记录和页的排序,这包括三个方面的含义:
页内的记录是按照c2列的大小顺序排成一个单向链表。各个存放用户记录的页也是根据页中记录的c2列大小顺序排成一个双向链表。存放目录项记录的页分为不同的层次,在同一层次中的页也是根据页中目录项记录的c2列大小顺序排成一个双向链表。2.B+树的叶子节点存储的并不是完整的用户记录,而只是c2列+主键这两个列的值。
3.目录项记录中不再是主键+页号的搭配,而变成了c2列+页号的搭配。 拿到主键值,还要回表拿到其他数据,如果当前二级索引有全部所需的数据,则不需回表(索引覆盖)
MyISAM中的索引方案简单介绍
MyISAM存储引擎的表会把索引信息另外存储到一个称为索引文件的另一个文件中。 主键值 + 行号的组合。也就是先通过索引找到对应的行号,再通过行号去找对应的记录! 下面为MyISAM记录格式: 上面的记录行格式是定长的(Static),可以很容易算出,某条记录的偏移量。 MyISAM还有变长记录格式(Dynamic)、压缩记录格式(Compressed),MyISAM会直接在索引叶子节点处存储该条记录在数据文件中的地址偏移量。MyISAM回表十分快速。
与innodb区别
在InnoDB存储引擎中,我们只需要根据主键值对聚簇索引进行一次查找就能找到对应的记录, 而在MyISAM中却需要进行一次回表操作,意味着MyISAM中建立的索引相当于全部都是二级索引!InnoDB中的索引即数据,数据即索引,而MyISAM中却是索引是索引、数据是数据。