标签:假设 type tps https 完整 ima 存储目录 sam 目录项
通过InnoDB数据页结构可知所有数据页组成双链表结构,每个数据页中的记录按照主键大小组成单向链表,根据主键查询某条记录是从页目录通过二分法比较主键大小找到对应的槽,再遍历槽中的记录找到目标记录。但是主键查找有方法,那其他的列查找又怎么实现。如果通过从最小记录开始依次遍历,很明显很傻,所以引出了索引的概念。
以InnoDB为例,假设某表采用compact为行格式存储记录,那么可知其中一条记录包含几个部分:record type,next record,各列的值,其他信息;主要看record type,0表示普通记录/1表示目录项记录/2表示最小记录/3表示最大记录,那么在数据页中一条记录的存在如下图:
一层一层下来就是一个树状即B+树,树由叶节点和根节点组成,最底下一层存储完整且实际的用户记录,称为叶节点;往上存放目录项的节点称为非叶节点或内节点,最顶上的称为根节点。那么查找目标记录同样也可采用二分查找法。
InnoDB会自动为我们创建聚簇索引,且聚簇索引就是数据的存储方式,核心在主键
因聚簇索引的存储方式以主键大小排序,如果对其他列有查询要求,那么可以为其他列建索引B+树;但是和聚簇索引不同,这个B+树的叶子节点只存放查询列+主键的值,目录项存储列+页号+主键值;其他均以该列的大小顺序为主,排序方式和表用到的字符集有关,如果找到目标记录所在节点就会根据主键值去聚簇索引中查找完整的用户记录,即回表。
以多个列的大小为排序顺序,即同时为多个列建索引,但只有一个B+树。记录项由列1,列2...,页号组成,叶子节点由列1,列2....和主键组成
innoDB根页面不动,索引注意事项
myisam中索引方案
注:来自MySQL是怎样运行的读数笔记
标签:假设 type tps https 完整 ima 存储目录 sam 目录项
原文地址:https://www.cnblogs.com/hangzhi/p/10947922.html