「面试」Mysql中索引实现原理

B站讲解视频:https://b23.tv/SC2FfH
数据结构演示网站:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html

什么是索引

  • 索引是帮助MySQL高效获取数据的排好序的数据结构

索引的目的

  • 索引数据结构的目的,就是用更少的查询次数获得数据,表现到树的结构上就是尽可能的减小树的高度。

索引的数据结构

  • 二叉树
    • 二叉树会出现变成链表的特殊情况
  • 红黑树(二叉平衡树)
    • 红黑树能避免出现链表化的情况,jdk1.8 hashmap链表长度大于8时转为红黑树,提升了代码效率。
    • 但是,红黑树在数据量过于庞大的时候并不能有效降低树的高度。
  • Hash表
    • 索引值hash之后存储到映射表中一一对应
    • 但是范围查找的情况下hash索引无法应对
  • B-Tree
    • 在红黑树的基础上引入多叉平衡树,每一个节点都存储索引和对应的数据
    • 但是在范围查找的时候同样需要消耗很多资源
  • B+Tree(多叉平衡树)
    • 非叶子结点不存储data(16K),只存储索引(冗余),可以方更多的索引
    • 叶子结点包含所有索引字段
    • 叶子结点用指针连接,提高区间访问能力(范围查找)
    • 一个索引有14B(8B+6B),一个节点最多有16KB,能存储1170个索引

两大存储引擎

  • 数据库中的存储引擎是用于表的
  • MyISAM索引文件和数据文件是分离的
  • InnoDB的索引文件和数据文件是聚合的
    • 什么是聚集索引:就是叶子结点包含了完整的数据记录
    • 什么是非聚集索引:叶子结点不包含数据记录
    • 为什么InnoDB表必须有主键,并且推荐使用整形自增主键:不推荐使用UUID,UUID使用的是长传的字符串,在查询的时候需要多次的对比大小,这时候使用UUID效率太低。UUID占用的空间比较大,所以推荐使用整形。因为考虑到B+树叶子结点总是顺序存放的,如果使用UUID就会导致顺序不确定,在插入的时候造成树的重新平衡会造成额外的性能开销
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值