当前位置: 首页 > 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+树的特点:

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

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

相关文章:

  • 金融数据库数字化转型:性能优化的实战经验
  • 【自动化脚本工具】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的缓存击穿,雪崩,穿透
  • 大模型微调解读及参数设置实践示例
  • Python 正则表达式的非捕获组介绍
  • 亲测Windows部署Ollama+WebUI可视化
  • 2024年国赛高教杯数学建模A题板凳龙闹元宵解题全过程文档及程序
  • 在nodejs中使用ElasticSearch(二)核心概念,应用
  • 从面试中的“漏掉步骤”谈自我表达与思维方式的转变
  • 【设计模式】【创建型模式】工厂方法模式(Factory Methods)
  • LeetCodehot 力扣热题100
  • Qt5 C++ TcpSocket 如何判断是服务主动断开tcp socket连接?
  • Django 5实用指南(五)模板系统
  • 如何在 Mac 上安装并配置 JDK 环境变量