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

MySQL(2)索引篇

1、什么是索引?

索引相当于是数据库的目录,是以空间换时间的设计思想,索引的定义就是帮助存储引擎快速获取数据的一种数据结构。

所谓的存储引擎,说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法,存储引擎就是一个方法库。

2、为什么MySQL采用B+树作为索引?

为什么 MySQL 采用 B+ 树作为索引? | 小林coding

MySQL的数据是持久化的,即数据(索引+记录)是保存到磁盘上的,因为这样即使设备断电了,数据也不会丢失。
磁盘读写的最小单位是扇区,扇区的大小只有 512B 大小,操作系统一次会读写多个扇区,所以操作系统的最小读写单位是块(Block)。Linux 中的块大小为 4KB,也就是一次磁盘 I/O 操作会直接读写8个扇区。

由于数据库的索引是保存到磁盘上的,因此当我们通过索引查找某行数据的时候,就需要先从磁盘读取索引到内存,再通过索引从磁盘中找到某行数据,然后读入到内存,也就是说查询过程中会发生多次磁盘 I/O,而磁盘 I/O 次数越多,所消耗的时间也就越大。所以,我们希望索引的数据结构能在尽可能少的磁盘的 I/O 操作中完成查询工作。那么采用什么数据结构能够尽可能减少磁盘 I/O 的次数呢?

综上所示,平衡二叉查找树(AVL树)、红黑树、B树都不适合作为索引的数据结构。

B+ 树的非叶子节点不存放实际的记录数据,仅存放索引,因此数据量相同的情况下,相比存储既存索引又存记录的 B树,B+树的非叶子节点可以存放更多的索引,因此 B+ 树可以比 B树更「矮胖」,查询底层节点的磁盘 I/O次数会更少

换一个角度看 B+ 树

通过上图,我们看出 B+树的特点:

  • 只有叶子节点(最底层的节点)才存放了数据,非叶子节点(其他上层节)仅用来存放目录项作为索引
  • 非叶子节点分为不同层次,通过分层来降低每一层的搜索量
  • 所有节点按照索引键大小排序,构成一个双向链表,便于范围查询

相关文章:

  • 金融数据库数字化转型:性能优化的实战经验
  • 【自动化脚本工具】Hammerspoon (Mac)
  • OpenCV对比度增强
  • 【Python】Python入门——笔记合集
  • 5.5 Soft Prompt技术:任务特定微调的新范式
  • 循环神经网络RNN原理与优化
  • Interactive High-Quality Green-Screen Keying via Color Unmixing
  • vue 父组件和子组件中v-model和props的使用和区别
  • 形参和实参
  • 强化学习入门
  • 12.按身高排序(贪心)思路解析+源码
  • C++初阶——简单实现vector
  • 动态规划(Dynamic Programming)详解
  • PLC扫描周期和工作原理
  • 【SQL】多表查询案例
  • 模型评测:基于Python和PyTorch的深度学习模型性能评估
  • leetcode 1155. 掷骰子等于目标和的方法数
  • AIGC训练效率与模型优化的深入探讨
  • redis的缓存击穿,雪崩,穿透
  • 大模型微调解读及参数设置实践示例
  • 国台办:提醒相关人员不要假借去第三地名义绕道赴台
  • 不准打小孩:童年逆境经历视角下的生育友好社会
  • 西班牙葡萄牙遭遇史上最严重停电:交通瘫了,通信崩了,民众疯抢物资
  • 国家发改委:我国能源进口来源多元,企业减少甚至停止自美能源进口对国内能源供应没有影响
  • 财政部下达农业生产防灾救灾资金3.76亿元,支持黄淮海等地抗旱保春播
  • QFII一季度现身超300家公司:持有南京银行市值最高,5家青睐立航科技