Mysql中索引的底层数据结构是什么

发布时间:2021-07-30 14:44:19 作者:Leah
来源:亿速云 阅读:245

Mysql中索引的底层数据结构是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。


索引数据结构对比

二叉树

左边子节点的数据小于父节点数据,右边子节点的数据大于父节点数据。 如果col2是索引,查找索引为89的行元素,那么只需要查找两次,就可以获取到行元素所在的磁盘指针地址。 Mysql中索引的底层数据结构是什么 如果col1是索引,查找索引为6的行元素,那么需要查找六次,就可以获取到行元素所在的磁盘指针地址,即得到了该索引为6的行元素。因此二叉树不适合存储单边增长的序列字段,近乎全表扫描获取数据。

红黑树

本质二叉树,属于二叉平衡树,jdk1.8 hashmap的底层实现; 存储大数据量,树的高度不可控, 数量越大,树的高度越高; 500w行数据,2的n次方=500w数据量, n是树的高度,也就是查询次数;

hash表

通过散列可以快速获取磁盘文件指针,对于指定索引查找文件非常快,但是对于范围查找没法支持。

B树

本质是多路二叉树; 叶节点具有相同的深度,叶节点的指针为空; 所有索引元素不重复; 节点中数据索引从左到右依次递增的; Mysql中索引的底层数据结构是什么

B+树(B树的变种)

非叶子节点不存储数据,只存储索引(冗余)和指针,可以放更多的索引,树高降低 ; 叶子节点包含所有索引字段; 叶子节点比b树增加了指针连接; 叶子节点有双向指针链接(首尾子节点还通过指针连接),提高区间访问的性能,范围查找; Mysql中索引的底层数据结构是什么

为什么mysql页文件默认16K?

MySQL每个B+树节点最大存储容量:16KB (指针+数据+索引)。假设我们一行数据大小为1K,那么一页就能存16条数据,也就是一个叶子节点能存16条数据;再看非叶子节点,假设主键ID为bigint类型,那么长度为8B,指针大小在Innodb源码中为6B,一共就是14B,那么一页里就可以存储16K/14=1170个(主键+指针) 那么一颗高度为2的B+树能存储的数据为:117016=18720条,一颗高度为3的B+树能存储的数据为:11701170*16=21902400(千万级条)

show global status like `Innodb_page_size`

因此,B+树存储大数据量的表也可以非常高效的获取数据,MySQL使用B+树作为索引的数据结构。

存储引擎

存储引擎最终作用于:表 ,不是数据库 在mysql的安装的根目录下,有一个data目录,里面存放的是所有表的数据。

frm文件:存储这张表的表结构 MYD文件:存储这张表的所有数据行 MYI文件:存储这张表的索引字段 Mysql中索引的底层数据结构是什么

表数据文件本身是按照B+tree组织的一个索引结构文件 frm文件:存储这张表的表结构 ibd文件:存储这张表的所有数据行和索引字段 聚集(聚簇)索引----叶节点包含完整数据记录 Mysql中索引的底层数据结构是什么

为什么InnoDB表必须有主键,并且推荐使用整型的自增主键?

为什么非主键索引结构叶子节点存储的是主键值?

联合索引

Mysql中索引的底层数据结构是什么


关于Mysql中索引的底层数据结构是什么问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。

推荐阅读:
  1. mysql的索引底层之实现原理是什么
  2. 怎样理解MySQL索引底层原理

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

mysql

上一篇:.Net Core和jexus如何配置HTTPS服务

下一篇:asp.net MVC下怎么使用rest

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》