Mysql的索引以及底层的数据结构(面试)

目录

无索引

有索引

索引底层的数据结构

其他数据结构

二叉搜索树

红黑树

B树

B+树

回答:

什么是索引?

索引底层的数据结构?

B树与B+树的定义和区别


索引(index)是帮助Mysql高效获取数据的数据结构(有序)。在数组之外,数据库系统还维护着满足特定查找算法的数据结构(B+树),这些数据结构以某种引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。

无索引

对于上面的图,我们如果想查到id7"灭绝"的年龄,没有索引的情况下,只能从id1开始逐个遍历查询,当我们查询到7时,查询也不会停止,会继续查询,遍历完整张表。效率较低

有索引

假如Mysql用二叉搜索树来维护表中的数据,查找效率会高很多。

索引底层的数据结构

其他数据结构

二叉搜索树

二叉搜索树在正常情况下的查找效率很高是O(log n)级别的,但是如果数据有序,它就会退化成链表,到达O(n)级别

红黑树

红黑树虽然没有二叉搜索树的会失衡的缺点,但是因为其仍然是二叉树,当数据量很大的时候,红黑树会非常的高,查找数据也要查询很多次。

B树

B树是一种多岔路衡查找树,相对于二叉树,B树的每个节点可以有多个分支,一颗最大度数为5的B树,每个节点可以存储4个key,它比较矮胖,查找层级就比较短,效率就更高

B+树

B+树是在B树基础上的一个优化,使其跟适合实现外存储索引结构,InnoDB存储引擎就是使用B+树来实现其索引结构的

相对B树的优点:

1.**磁盘读写代价比B树更低:**非叶子节点只存储指针,不存储任何数据,叶子节点才会存储数据,B树在查询的过程中,需要加载路径上的节点的数据才能够定位到目标数据的位置;B+树的非叶子节点存储的是方便找到目标叶子节点的指针,效率高很多。

2.**查询效率B+树更稳定:**B树有可能在非叶子节点上找到目标数据;而B+树每次都要到叶子节点查找数据,更加稳定。

3.**便于扫库和区间查询:**B+树的叶子之间有双向指针,在进行范围查询的时候,不需要回到根节点重新查找数据,查找效率更高。

回答:

什么是索引?

索引是帮助Mysql高效率获取数据的数据结构;它提高了数据检索的效应,降低了数据库的IO成本;通过索引列对数据进行排序,降低数据排序的成本,降低了CPU消耗,因为我们在创建索引的时候就需要进行排序了。

索引底层的数据结构?

Mysql的InnoDB引擎采用的B+树的数据结构来存储索引

因为B+树的阶数更多,路径更短;相对于B树来说,B+树的磁盘读写代价更低,因为它的非叶子节点只存储指针,叶子阶点才存储数据;并且因为B+树的叶子节点之间有双向指针,B+树更方便扫库和区间查询,无需像B树一样返回根节点进行重复的查询。

B树与B+树的定义和区别

B树是一种平衡的多路搜索树,每个节点既存储键(key)也存储对应的数据(data),所有节点(包括内部节点和叶子节点)都能直接访问数据。

B+树是B树的变种,内部节点只存储键作为索引,不存储数据,所有数据都集中在叶子节点存储,并且叶子节点之间通过指针连接成有序链表。

核心区别

  • 数据存储位置:B树所有节点都存数据,B+树只有叶子节点存数据

  • 查询效率:B树可能在非叶子节点就找到数据(等值查询更快),B+树必须走到叶子节点才能找到数据(每次查询路径长度固定)

  • 范围查询:B树需要中序遍历,效率低;B+树通过叶子节点的链表可以直接顺序遍历,效率极高

  • 空间利用:B+树内部节点只存索引,能容纳更多键,树更矮,减少IO次数

  • 冗余性:B+树键会冗余出现在内部节点和叶子节点,保证叶子节点包含所有键

相关推荐
m0_613856294 小时前
mysql如何利用事务隔离级别解决特定业务冲突_mysql隔离方案选型
jvm·数据库·python
Adios7944 小时前
VPR:Pitts50K和Norland数据集下载
数据库
东风破1374 小时前
DM用户权限、表、约束等对象的基本操作,SQL日志的开启介绍
数据库·sql·dm达梦数据库
收获不止数据库4 小时前
达梦9发布会归来:AI 时代,我们需要一款什么样的数据库?
数据库·人工智能·ai·语言模型·数据分析
小宇的天下4 小时前
Virtuoso GUI 界面中的关键模块定义
数据库
bqq198610265 小时前
MySQL 5.7 与 MySQL 8.0 的主要区别
数据库·mysql
Elastic 中国社区官方博客5 小时前
Elastic-caveman : 在不损失 Elastic 最佳效果的情况下,将 AI 响应 tokens 减少64%
大数据·运维·数据库·人工智能·elasticsearch·搜索引擎·全文检索
互联网推荐官6 小时前
上海软件定制开发全流程拆解:需求分析、技术选型与交付管理的工程实践
大数据·数据库·需求分析
专注API从业者6 小时前
Open Claw 京东商品监控选品实战:一键抓取、实时监控、高效选品
java·服务器·数据库
大迪deblog6 小时前
系统架构师-数据库-数据库设计
数据库·oracle·系统架构