MySQL现在最常用的存储引擎是MyISAM、InnoDB(默认)
两者实现的底层原理都是B+Tree索引文件结构。
MyISAM索引实现过程解析:(非聚集)
目标:上图以主键索引为例:想要查索引为50的那一条记录信息。
步骤如下:
1.cpu先去根节点拿数据到内存中查看,没有找到数据,去箭头1方向查找。
2.把非叶子结点的数据拿到内存中查看,也没有发现数据,应该去箭头2的方向查找。
3.在箭头2的叶子节点中发现了数据key50,而对应的data为0x77。
4.通过指针0x77,在应找到数据表中就能快速的找到索引为50的那一条记录。
InnoDB索引实现过程解析:(聚集)
InnoDB 索引的实现和MyISAM的不同点:InnoDB叶子节点不仅包含了索引,也包含了所有其他字段。
注意点:及相关经典面试题:
1.聚集索引与非聚集索引?
聚集索引:叶节点包含了完整的数据记录
非聚集索引:叶子节点包含索引和指针,指向的数据在另一个表中。
2.为什么InnoDB表必须有主键,而且推荐自增整型主键?
因为InnoDB本身就是按B+Tree组织的一个索引文件,所以一定要索引,主键是要帮我们存储整个表的索引结构和数据,所以一定要有主键。
因为B+Tree规定了节点数据是要依次递增的,而且整型数字比较节省空间,如果是随机索引的话,会引起节点的分裂,会消耗数据库性能,所以选择自增主键。也可以uuid作对比来说。