MySQL索引(一)——索引概念及索引数据结构

MySQL索引(一)——索引概念及索引数据结构

概念

索引是帮助MySQL高效获取数据的排好序数据结构(B+Tree),可以理解为一本字典的通过目录找到具体索要查询数据的位置。

例:
在这里插入图片描述
假如我们现在要执行select * from t where t.col2=89

1.不用索引过程:数据库会从上到下去查找,查询顺序为:34、77、5、91、22、89。

2.给col2创建索引之后的查找:第一次查找到34,因为89>34,所以查找34的右孩子,然后找到89。

索引的数据结构种类

二叉树

在这里插入图片描述
缺点:针对于col1简历索引,因为索引是排好序的(为什么排好序,下面会介绍),所以当按照顺序建立索引的时候会发现建立出来的结构如下图:
在这里插入图片描述
他会变成一个链表,对于查询没有丝毫优化

红黑树

缺点:红黑树相对于二叉树当深度相差过大的时候会发生自旋来平衡二叉树,但对于数据库百万数据存储也会导致红黑树的高度不可控
在这里插入图片描述
如上图,当数据为7条的时候就需要3次查询了。

Hash表

B Tree

引入:每一个节点通过横向衍生从而来控制高度,从而减少树的高度。

特点:
1.叶节点具有相同的深度,叶节点的指针为空
2.所有索引元素不重复
3.节点中的数据索引从左到右递增排列
在这里插入图片描述

B+Tree

引入:因为B Tree每个节点都存储了data,占用了大量空间,所以为了尽量在相同的层数存储更多的数据,引出了B+Tree。
特点:
1.非叶子节点不存储data,只存储索引(冗余),可以放更多的索引。
在这里插入图片描述
对于B+Tree,每次读出的一个节点(如上图)就是磁盘中的一页数据,一页数据大小为16kb,所以如果要保证一页数据包含的数据量更多,就更多的存储索引而不去存储他的data(data所占空间比索引所占空间要大得多)

2.叶子节点包含所有索引字段。

3.叶子节点用指针连接,提高区间访问的性能。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值