MySQL之索引

索引底层结构

MySQL支持两种索引:一种是基于B树索引、一种是基于哈希表索引,这两种索引的查询效率比较高
MySQL中B树(B+树)的索引结构:

B树特征

大多数的存储引擎都支持B树索引,B树通常意味着所有的值按照顺序存储,并且每个叶子节点到根的距离相同,B树索引能够加快数据访问的速度。
在这里插入图片描述

1、根节点至少包含两个孩子 。
2、树中每个结点最多含有m个孩子(m >= 2)。
3、除了根节点和叶结点外,其他每个结点至少含有ceil(m/2)个孩子,ceil为向上取整 。
4、所有叶子结点位于同一层(高度相同)。
5、假设每个非终端结点中包含有n个关键字信息,其中Ki(i = 1…n)为关键字,且按顺序升序排列 关键字的个数n必须满足:[ceil(m / 2) - 1] <= n <= m - 1非叶子结点的指针P[1],P[2],…,P[M];其中K[1]指向关键字小于K[1]的子树,P[M - 1] 指向关键字大于K[M -1]的子树,其它P[i]指向关键字属于(K[i-1],K[i])的子树,比如看图中关键字值为8的这个结点,P1所对应的这个子树,其值均小于8。

查询效率为O(log n)

B+树特点:

B+树是B树的变体,基本定义与B树相同,不同点在于:

非叶子结点的子树指针与关键字个数相同(所以相对于B树,B+树能够存储更多的关键字)。
非叶子结点的子树指针P[i],指向关键字值**[K[i], K[i+1])**的子树,注意区间为左开右闭。
非叶子结点仅仅用来索引,数据都保存在叶子结点中(B+树所有的检索都是从根部开始,检索到叶子结点才能结束,而且非叶子结点不存储数据的话就能存储更多关键字)。
B+树相对于B树更矮。 所有叶子结点均有一个链指针指向下一个叶子节点。

在这里插入图片描述
范围查询 where age < 10 and age <35
B+ 树更适合用来做存储引擎索引

1、B+树的特点使得磁盘IO的代价更小,B+树的内部节点并没有指向关键字具体指针信息,因此其内部节点相对于B树更小,所以B+树的磁盘读写的代价更低。
2、B+树的查询效率更加稳定(所有数据都存放在叶子节点,查询效率是O(logn))。
3、B+树更利于数据库的扫描,进行范围查询。

哈希结构:

在这里插入图片描述
哈希结构和B树结构不能支持范围查询,哈希表对数据不排序,范围查询效率比较低,要查询整个哈希表结构。
哈希结构通过一定的算法查询数据,在相同情况下,遇到大量的哈希值相等是性能不一定比B树性能高。

主键索引、辅助索引、聚集索引、非聚集索引

mysql两种主流的存储引擎是MyISAM和INNODB

MyISAM存储引擎相关索引

主键索引

MyISAM引擎是使用B+树作为索引结构,叶子节点的data域存放的是数据记录地址。
在这里插入图片描述

辅助索引

MyISAM中,主键索引和辅助索引在结构是一样的,B+树构建辅助索引,其叶子节点data域存放的是地址。
主键索引要求key是唯一的,辅助索引的key可以重复的

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值