美文网首页算法和数据结构
innodb的b+树索引结构

innodb的b+树索引结构

作者: 无聊之园 | 来源:发表于2019-04-27 16:35 被阅读33次

一、innodb索引结构为什么是树结构,不是hash结构。
hash索引,时间复杂度为O(1),平衡二叉树的时间复杂度为O(lg(n))。但是由于sql查询数据,很多都是范围查询,而树是有序的,hash是无序的,hash定位不到范围数据,所以索引结构是树,而不用hash结构。
此外,支持hash索引的引擎有:

image.png
innodb自适应hash索引,并不是和普通b+索引一样,我们手动指定哪一行创建还是不创建,而是innodb引擎会监控二级索引的访问频率,如果频率太高,则自动创建这个二级索引的hash索引,便于下次查找这个数据的时候,不需要通过b+树定位这个索引,而是直接hash找到这个索引。
当然,可以关闭innodb_adaptive_hash_index 这个变量来关闭自适应hash索引。

二、索引结构为什么是 b+ 树
平衡二叉树
在数据结构中,平衡二叉树,是有序查找效率很高的树,但是,数据一多,树的高度会很高,每个节点存储一个数据,那么在以叶为单位访问磁盘的时候,会造成很多次磁盘io。

b树
一个节点存储很多个数据,而且不是二叉,而是n叉,同时,跟平衡二叉树一样,节点有序。
这样的结构,结果就是,当一个节点的大小为页的大小的时候(一页的大小是4k),每次读取,都能读取一个节点的数据,读取到内存,再在内存中处理,速度会非常快。同时由于节点存储的数据很多(4k),树的高度不会很大,也就3到4级。

b+树
b+树和b树的区别是:b+树,1、非叶子节点不存储记录,记录都是存储在叶子节点上。2、叶子节点之间有链表关联。
这样,1、在范围查找的时候,直接找到最大,最小的值,然后进行链表遍历就能找到所有数据,不需要再进行树遍历。2、非叶子节点存储pk,叶子节点存储记录,记录之间存储的会更加紧密,遍历pk的时候,读取一页数据进内存,这页数据都是pk,而没有实际的记录,所以查找会更快。

相关文章

  • mysql innodb索引和锁笔记

    索引数据结构B+树 在innodb中,表都是根据主键顺序以索引的形式存放的,innodb采用B+树索引模型,索引都...

  • MySQL

    索引 InnoDB MySQL5.6版本之后默认引擎是innoDB,以B+树作为索引的数据存储结构。B+数是以B树...

  • MySQL:索引

    索引的底层实现 InnoDB存储引擎数据结构使用B+树 B+树 B+数据的基本结构如下图 为什么选用B+树 MyS...

  • B+树

    B+树概况 InnoDB使用了B+树索引模型 每个索引在InnoDB里面对应一棵B+树 B+树特点 m阶B+树每个...

  • MySQL索引及其优化

    MySQL中索引实现的底层数据结构 B+树索引 InnoDB可以使用这个也可以选择Hash InnoDB引擎中索引...

  • MySQL最左匹配原则

    在上一篇InnoDB索引里我们了解了B+树的结构,那么联合索引B+树长什么样呢? 假设我们现在有a,b的联合索引,...

  • MySql中InnoDB表为什么要建议用自增列做主键

    InnoDB引擎表的特点 1、InnoDB引擎表是基于B+树的索引组织表(IOT) 关于B+树 B+ 树的特点: ...

  • MySQL中的索引(二)InnoDB中的索引

    相关的数据结构 在InnoDB存储引擎中,建立索引所使用的数据结构是B+树。这里我们看看和B+树相关的数据结构。 ...

  • MYSQL的索引与B+Tree

    MySQL 索引与 B+ 树 B+ 树 MySQL Innodb 存储引擎是使用 B+ 树来组织索引的。在介绍 B...

  • 索引

      InnoDB支持B+树索引、全文索引、哈希索引三种索引方式。 B+树的创建和删除操作   B+树的B是平衡(B...

网友评论

    本文标题:innodb的b+树索引结构

    本文链接:https://www.haomeiwen.com/subject/tajknqtx.html