MySQL数据库索引的数据结构

数据库索引的功能就是让查找更加的高效,所以索引的数据结构应该是能够加速查找的数据结构。

MySQL的innoDB存储引擎的索引的数据结构就是多叉搜索树中的b+树,这可以说是为索引量身定做的一个数据结构。

首先,索引可以通过主键,unique修饰,也可以直接使用sql语句创建。当用主键给修饰id列,创建出索引,b+树是如何存储每个节点并提高查找效率的呢?

b+树相比普通多叉搜索树的特点:

(1)b+树是棵平衡树,树的深度都是差不多的,查找的次数不会相差很大。

(2)b+树的叶子节点包含了整个树所有的数据。

就这两个特点,让b+树成为了和索引完美适配的搜索树。

(1)因为b+树的叶子节点中包含了所有的数据,所以只需要在叶子节点中存储一条完整的数据,非叶子节点只存储用来做索引的那一列的值,大大减小的存储空间。

(2)因为数据库都是在磁盘上存储的,每次比较都要从磁盘上读取数据,b+树是多叉树,每次io读取一个节点可以获取多个数据来比较,减少了io次数,加快了比较效率。

(3)因为只有叶子节点才有完整数据,所以每次查询都会查到叶子节点,并且b+树是平衡树,所以深度都差不多,所以不管查询什么数据,最后的io次数都是差不多的,保证了查询的稳定。

当一个表中除了主键之外,还有其他的索引的时候,其他的索引的叶子结点就不是存储的整条数据了,而是存储的主键索引的叶子节点的位置。

所以其他索引查找时最终都会回到主键索引去获得整条数据。这也进一步节省了索引的空间消耗。这个操作叫做回表。

相关推荐
麒麟ZHAO4 分钟前
鸿蒙flutter第三方库适配 - 文件对比工具
数据库·redis·flutter·华为·harmonyos
香蕉鼠片6 分钟前
Redis
数据库·redis·缓存
翻斗包菜8 分钟前
第 03 章 Python 操作 MySQL 数据库实战全解
数据库·python·mysql
旖-旎10 分钟前
哈希表(存在重复元素||)(4)
数据结构·c++·算法·leetcode·哈希算法·散列表
SPC的存折11 分钟前
1、MySQL故障排查与运维案例
linux·运维·服务器·数据库·mysql
小臭希14 分钟前
Redis(NoSQL数据库,Linux-Ubuntu环境下)
数据库·redis·缓存
cdcdhj15 分钟前
在window下将Mongodb单机改为副本集,只用于测试环境,实际上并没有增加真的副本集
数据库·mongodb
悟空码字17 分钟前
MySQL性能优化的天花板:10条你必须掌握的顶级SQL分析技巧
java·后端·mysql
被摘下的星星19 分钟前
数据结构中逻辑结构和存储结构对应有哪些
数据结构
xcjbqd020 分钟前
如何修改Oracle服务器默认的日期格式_NLS_DATE_FORMAT全局配置
jvm·数据库·python