二:mysql索引底层原理与数据结构常见面试题与答案

2020-04-30 73 ℃

索引优化面试题

  • 索引是帮助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去查找相关数据。
  • 主键:聚集索引,数据在叶子上

联合索引的底层存储结构长什么样?

版权声明:冰雨stack原创文章,转载请注明出处。

文章链接:http://127.0.0.1:8080/mysqlAbout.html

发表时间:2020-04-30 00:24

最后更新时间:2020-04-30 00:26