当前位置: 首页 > article >正文

Mysql中索引B+树、最左前缀匹配

这里需要对索引的相关结构有一个基础的认识,比如线性索引,树形索引(二叉树,平衡二叉树,红黑树等),这个up主我觉得讲的还是比较清楚的,可以看下。 

终于把B树搞明白了(一)_B树的引入,为什么会有B树_哔哩哔哩_bilibili

主要是三个方面:

  • IO次数减少;
  • 查询性能的高效(等值查询和范围查询的相对高效);
  • 和其他几种索引对应的缺点

1,B+树的非叶子节点没有保存数据,仅仅保存了对应的索引值和指向子节点的指针,这使得一个datapage能够保存更多的索引键值,大幅度减少了了IO次数的操作;

2,B+树是一种自平衡树,所有的数据都在叶子节点上存储,B+树的平衡性保证了查询路径长度一致,在等值查询上,实现查询的O(logn)时间复杂度。B+树又是一个多叉树,树的高度不会随着数据的大量增长快速增加,大量数据的情况下,也是具有较高的查询性能;在范围查询上,B+树的叶子节点的数据可以使用双向链表对其进行遍历,避开了父节点回溯,同样实现了较高的查询效率,除此之外,叶子节点是有序存储,天然适配排序操作;

3,对于其他的索引,比如,哈希无法支持有效的范围查询;二叉树的深度过大,对大数据量不友好;B树的每一个节点都存储数据,导致IO开销较大;跳表,内存中效率接近B+树,但磁盘存储时层数较高,且节点分散导致无法利用磁盘预读。

什么是最左前缀匹配

1,最左索引匹配指的在使用联合索引时,查询条件需要联合索引从最左列开始依次匹配,从第一列开始,然后是第二列,第三列,以此类推,只有在仅最左列,连续前缀,或者完全顺序覆盖的情况下有效。

2,最左前缀匹配原则是因为Mysql索引基于B+树结构,联合索引的存储顺序严格遵循定义的顺序,B+树查找时,需要从最左侧逐层定位,如果跳过开始列(a),则会导致索引失效全表扫描,举个例子,查找国内的某个人,需要确定省份---->城市----->姓名,这样子可以实现快速定位,如果跳过省份,则需要全表扫描才能找到。

3,在这个过程中需要注意范围查询(> 、<、%abc )会打断索引匹配,包含等值查询(>=、<=)或者做前缀匹配(abc%)则不会.

3层B+树大约是多少条数据

对于B+树的存储结构做出下面的假设:

 假设

datapage: 16kB

data + key : 1KB

单页数据数:16KB/1KB = 16

key : 8 B

next : 6 B

单页索引指针:16*1024/14~~1170

总的数据总数: 1170 * 1170 * 16 ~~ 21000000+

http://www.lryc.cn/news/2391856.html

相关文章:

  • Python训练营打卡 Day38
  • 【机器学习基础】机器学习入门核心算法:K均值(K-Means)
  • Python Day37
  • RabbitMQ集群与负载均衡实战指南
  • 怎么开机自动启动vscode项目
  • Unity 中 Update、FixedUpdate 和 LateUpdate 的区别及使用场景
  • linux安装ffmpeg7.0.2全过程
  • Java中的设计模式实战:单例、工厂、策略模式的最佳实践
  • DexGarmentLab 论文翻译
  • Elasticsearch性能优化全解析
  • 2025.05.28【Parallel】Parallel绘图:拟时序分析专用图
  • tc3975开发板上有ft2232这块的电路,我想知道这个开发板有哪些升级方式,重点关注是怎样通过ft2232实现的烧录升级的
  • 自动驾驶与智能交通:构建未来出行的智能引擎
  • Kotlin Multiplatform与Flutter深度对比:跨平台开发方案的实战选择
  • ELectron 中 BrowserView 如何进行实时定位和尺寸调整
  • 深兰科技董事长陈海波率队考察南京,加速AI大模型区域落地应用
  • 《深度关系-从建立关系到彼此信任》
  • IT选型指南:电信行业需要怎样的服务器?
  • 【ConvLSTM第二期】模拟视频帧的时序建模(Python代码实现)
  • [VMM]分享一个用SystemC编写的页表管理程序
  • 将docker数据目录迁移到 home目录下
  • 【论文解读】DETR: 用Transformer实现真正的End2End目标检测
  • Pytest 是什么
  • ElasticSearch简介及常用操作指南
  • 缓存常见问题:缓存穿透、缓存雪崩以及缓存击穿
  • 纤维组织效应偏斜如何影响您的高速设计
  • 【深度学习】sglang 的部署参数详解
  • SDL2常用函数:SDL_RendererSDL_CreateRendererSDL_RenderCopySDL_RenderPresent
  • [git]忽略.gitignore文件
  • FEMFAT许可的有效期限