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

MySQL索引篇---数据结构的选择

由于MySQL是将数据存储在硬盘中的,而访问硬盘中的数据的速度是很慢的,所以为了提高MySQL的查询效率,就创建了索引来帮助提高查询效率。

1.什么是索引

MySQL中的索引是一种数据结构,它可以帮助数据库更高效地查询、更新表中的数据。索引通过一定的规则去排列数据表中的记录,这样就可以帮助我们在查询数据时,可以通过索引来高效地查询数据

那么,MySQL中的索引使用了那种数据结构呢?

2.索引的数据结构

第一种数据结构:HASH

哈希表的查询时间复杂度为O(1),但是MySQL中没有选择HASH作为索引的数据结构,因为HASH不止范围查询

第二种数据结构:平衡二叉树

平衡二叉树有一个特点,就是它的中序遍历的结果是一个有序序列,也就说明了平衡二叉树可以实现范围查询,大部分情况下,查询的时间复杂度为O(logN),但是在最坏情况下,平衡二叉树会退化为单边树,这就会导致查询的时间复杂度退化为O(N),还有一个缺点就是一个节点最多只能拥有两个节点,这就导致在节点过多的情况下,平衡二叉树无法很好的控制树高,由于MySQL是将数据存储在硬盘中的,如果使用的索引数据结构是平衡二叉树,每一次访问叶子节点就要进行一次磁盘IO,如果叶子节点很多且树的高度很多,这就意味着需要进行很多次的磁盘IO,此时查询效率就会大打折扣

第3种数据结构:N叉树,也称B树

在N叉树中,允许每一个节点拥有超过两个的子节点(N叉树有一个度的概念,度代表着一个节点最多只能拥有几个子节点,一般子节点个数的小于度的值),这就很好地解决了控制树高的问题,这就意味着在数据量相同的情况下,N叉树相对于平衡二叉树来说,进行一次查询会进行更少次数的磁盘IO,从而更快的找到目标节点,这就大大提高了查询效率,查询的时间复杂度:O(logN)

但是这还不是MySQL中的索引使用的数据结构

第4种数据结构:B+树

B+树就是MySQL中索引使用的数据结构,那么B+树和B树有什么区别呢?

首先,B+树中的叶子节点都保存了一个指向相邻的叶子节点的引用,这就使B+树中的叶子节点之间形成了一个单向链表,从而可以通过一个叶子节点来找到其相邻的兄弟节点,但是MySQL中对这一部分也进行了一点优化,在MySQL中,组织叶子节点的方式是使用了双向链表的形式

其次,在B+树中,非叶子节点中的值都包含在了叶子节点中,但是在MySQL中,B+树的非叶子节点只保存了连接其子节点的索引,非叶子节点中不包含真正的数据,真正的数据都包含在叶子节点中

最后就是,对于B+树而言,在相同树高的情况下,查找任意一个数据的时间复杂度都是一样的,性能均衡

http://www.dtcms.com/a/390764.html

相关文章:

  • 【STM32 CubeMX + Keil】 中断、NVIC 、EXTI
  • BIGO一面面试总结
  • Ansible-fetch模块
  • DevExpress WPF中文教程:DataGrid - 服务器数据和大型数据源
  • Vue项目不同页面显示不同的title
  • NW820NW825美光固态闪存NW829NW832
  • aosp13/14/15/16如何实现窗口局部区域高斯模糊毛玻璃效果及Winscope原生重大bug发现
  • Java微服务架构设计模式精解
  • 设计模式面试之单例模式常问知识点
  • 深入解析 MySQL 元数据锁 (MDL) 与 SHOW PROCESSLIST 实战
  • 能不能写一个可以在linux使用的类nano编辑器
  • Rocky10 使用kubeadm部署K8s v1.34 一主两从
  • 深入理解Buffer:数据世界的“蓄水池“
  • 通义万相开源 Wan2.2-S2V-14B,实现图片+音频生成电影级数字人视频
  • windows c++环境 使用VScdoe配置opencv
  • JVM(四)-- 对象的实例化内存布局和直接内存
  • G1垃圾回收器的优势
  • 内存分配策略
  • Python采集Tik Tok视频详情,Tik TokAPI接口(json数据返回)
  • 实时通信技术大比拼:长轮询、短轮询、WebSocket 与 SSE 深度解析及实战指南
  • ICML 2025|图像如何与激光雷达对齐并互补?迈向协调的多模态3D全景分割
  • 基于Web的3D工程应用图形引擎——HOOPS Communicator技术解析
  • 【每日一问】运放的失调电压是什么?对于电路有何影响?
  • 【轨物方案】轨物科技新型储能管理系统:以AIoT技术驱动储能资产全生命周期价值最大化
  • 线性回归 vs 逻辑回归:从原理到实战的全面对比
  • HashMap的底层原理
  • 股指期货超短线如何操作?
  • 【洛谷】算法竞赛中的树结构:形式、存储与遍历全解析
  • 育苗盘补苗路径规划研究
  • API Gateway :API网关组件