大家好,我是热心的大肚皮,皮哥。今天我们接着聊一聊索引,不多说,开整。
索引的分类
InnoDB索引分为聚簇索引、二级索引、联合索引。
聚簇索引
上一篇我们聊到的索引就是聚簇索引,它有以下两个特点。
- 使用记录主键值的大小进行记录和页的排序,包含3种含义。
1、页中的数据根据主键的大小形成单向链表,分成不同的组,每个组中主键最大记录在页内的偏移量当作槽存在页目录中,其中infimum为头,supremum为尾,通过二分法可快速查找。
2、各个存放用户记录的页根据主键大小形成双向链表。
3、存放目录项的页分为不同的层级,同层级也根据主键大小形成双向链表。 - B+树的叶子节点存放了用户记录的全部内容,包括隐藏列。
这就是聚簇索引,而且mysql会主动帮我们创建,其次所有的记录存放在叶子节点,正所谓索引即数据,数据即索引。
二级索引
如果我们想提高其他的列作为查询条件的性能怎么办呢?这时候二级索引就派上用场了,我们可以多创建几颗B+树,举个例子,我们把c2列创建索引,这类二级索引与聚簇索引有些不同,如下所示。
- 使用记录主键值的大小进行记录和页的排序。这个特性与聚簇索引一致,只不过把主键换为c2列。
- 目录项纪录中存放的是c2列+叶号。
- B+树的叶子节点存放的数据不是用户记录的全部信息,而是c2列与主键。
那么是怎么查询呢?以c2=4举例。
- 首先根据目录项查询第一条c2&