B-Tree / B+Tree / Hash

1、B-Tree

B-Tree.png

  • 相比较红黑树来说,B-Tree很大程度上提升了查询效率(树的高度为3的情况下,Mysql单表可以存放千万级数据,理论上来说,如果做等值查询,最多只需要3次磁盘的IO就会就会得到数据),上图是B-Tree的数据结构,可以看到每一个key对应的一个data,如果表内数据比较庞大(或是字段较多的情况),这样就造成了树十分庞大,单次IO加载索引文件的时候会非常的慢,于此同时各个节点之间也没有关系(如指针等),对此,引入了B+Tee

2、B+Tree

B+Tree.png

  • 叶子节点不存储指针;
  • 顺序访问指针,提高区间访问的性能;
  • 非叶子节点不存储data,只储存key,可以增大度(Degree);
  • 对比B-Tree来说,B+Tree可以很好的支持范围查询,降低了单次IO的成本

MYISAM.png

  • MYISAM的聚簇索引和非聚簇索引的结构都是一样的,存放索引结构和数据内容的文件是分开存放的

InnoDB-聚簇.png
InnoDB-非聚簇.png

  • 聚簇索引下存放的是真实的数据,非聚簇索引下存放的是聚簇索引的id(一致性:每次对数据进行CRUD的操作,对应的索引结构也要做出对应的调整,减少维护的成本;节省存储空间:服务器的内存空间是非常宝贵的,能节省就节省),也就是说大部分情况下,都是要进行回表查询的操作,这也就是主键索引为什么比非主键索引块的根本原因

  • 为了满足MySQL的索引数据结构B+树的特性,必须要有索引作为主键,可以有效提高查询效率,因此InnoDB必须要有主键。如果不手动指定主键,InnoDB会从插入的数据中找出不重复的一列作为主键索引,如果没找到不重复的一列,这时候InnoDB会选择内置的ROWID作为主键,写入顺序和ROWID增长顺序一致;

  • 索引的数据类型是整型,一方面整型占有的磁盘空间或内存空间相比字符串更少,另一方面整型比较比字符串比较更快速,字符串比较是先转换为ASCII码,然后再比较的。

  • B+树本质是多路多叉树,如果主键索引不是自增的,那么后续插入的索引就会引起B+树的其他节点的分裂和重新平衡,影响数据插入的效率,如果是自增主键,只用在尾节点做增加就可以。
    ###3、Hash
    Hash.png

  • 通过Hash算法得到数组的下标值,进行存放,如果Hash冲突,使用链表来解决冲突(类似JDK1.7以前的HashMap,也可以使用寻址的方式解决冲突,维护成本比较高)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值