持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第18天,点击查看活动详情
前言
上篇我们学习了MySQL中的索引。有兴趣的小伙伴可以阅读(MySQL学习-索引)。
下面我们继续学习MySQL中的InnoDB的索引。
InnoDB中的索引
索引之前的查找
使用SELECT语句进行查找数据。在没有索引的情况下,不论是根据主键列或者其他列的值进行查找,由于我们并不能快速的定位到记录所在的页,所以只能从第一个页沿着双向链表一直往下走,在每一个页中根据我们上面的查找方式去查找指定的记录。因为要遍历所有的数据页,所以这种方式显然是非常耗时的。如果一个表有一亿条记录呢?此时索引应运而生。
设计索引
创建一张表。
CREATE TABLE test(
index INT,
name VARCHAR(10),
gender CHAR(1),
PRIMARY KEY(index)
) ROW_FORMAT = Compact;
这个表test中有一个INT类型的列,一个VARCHAR类型的列,一个CHAR类型的列,而且定义了index列为主键,这个表使用Compact行格式来实际存储记录。这里我们把每条记录想象成一个一维数组,数组中存储的字段如下:record_type,next_record,index列,name列,gender列,其他信息。
其中字段含义如下:
- record_type:记录头信息的一项属性,表示记录的类型,0表示普通记录,2表示最小记录,3表示最大记录。
- next_record:记录头信息的一项属性,表示下一条地址相对于本条记录的地址偏移量。
- 各列值:这里只记录在test表中的三个列,分别是index列,name列和gender列。
- 其他信息:除了上述3中信息以外的所有信息,包括其他隐藏列的值以及记录的额外信息。
多条记录放在一起组成了页,每页都包含若干记录,包括一条最小的记录,若干普通记录和一条最大的记录。
今天先学习到这里,明天继续。