二:mysql索引底层原理与数据结构常见面试题与答案
2020-04-30
1541 ℃
二:mysql索引底层原理与数据结构常见面试题与答案
2020-04-30 1541 ℃
索引优化面试题
- 索引是帮助Mysql高效获取数据的排好序的数据结构
- 索引储存在文件里
- 索引结构
- 二叉树
- hash(在范围找到的时候就没用了,只能够精确查找)
- B-tree
B-tree
- 度(degree)-节点的数据结构储存个数
- 叶节点m相同的深度
- 叶节点的指针为空
- 节点中的数据key从左到右递增排列
如何设计这个度去让这个数据查的更快?
B+tree
- 非叶子节点不储存data,只存储key,可以增大度
- 叶子节点不储存指针
- 顺序访问指针,提高区间访问的性能
储存引擎
MyISAM
- myISAM索引文件和数据文件是分离的
- 主键:叶子里储存的是储存地址(0xXXXXX)
- 其他普通索引: 跟主键的储存的数据结构也是一样的
InnoDB(聚集)
- 数据文件本身就是索引文件
- 表数据文件本身就是B+Tree组织的一个索引结构文件
- 聚集索引-叶节点包含了完整的数据记录
- 为什么InnoDB表必须有主键,并且推荐使用整型的自增主键?
- 答:主键作为B+Tree数据结构的索引,叶子储存所有数据。
- 为什么非主键索引结构叶子节点储存的是主键值?(一致性和节省存储空间)
- 答:先通过非主键索引B+Tree查找到数据的主键,再通过主键索引的B+Tree去查找相关数据。
- 主键:聚集索引,数据在叶子上