索引的底层实现
索引用来做什么?用于快速检索数据。
InnoDB的索引基于B+树。行锁是基于索引的。B+树是一种平衡查找树,在基于磁头的硬盘中查找性能很高。
在B+树中,非叶子节点充当的是索引的作用。所有的叶子结点中包含了全部关键字的信息,及指向含这些关键字记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接。
在 MySQL 中,索引有聚集索引和辅助索引之分:
名词 | 解释 |
---|---|
聚集索引 | 按照一张表的主键构造一颗B+树,叶子节点存放的是整张表的行记录数据。 |
辅助索引 | 也叫非聚集索引。 叶节点除了包含键值以外,每个叶级别中的索引行中还包含了一个书签(bookmark),该书签就是相应行数据的聚集索引键。 |
如果一张表在创建时没设置主键怎么办?没关系,MySQL会帮忙创建一个我们看不到的主键。
另外,索引也可以划分为「唯一索引」和「非唯一索引」。