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

InnoDB索引的原理

在鹅厂后端开发一面,我遇到了如题这样一个比较宽泛的问题,当时可能只是背了相关概念,对于索引的了解不是很深刻。
最近,我花了很大的功夫去深入了解MySQL的索引。
下面是我的一些思考:
索引 其实 就是目录, 从大体上看,其实结构和 用户记录页(叶子节点的页)很相似:

  • 对于聚簇索引来说,只是叶子节点存放的列包括主键和其他列,索引存放的是每个页中最小主键值和页号
  • 对于非聚簇索引来说,叶子节点存放的是 索引列 和主键值(没有包含全部的行数据),索引存放的是上述聚簇索引存放的+ 索引列的值(保证在B+树的同一层内节点的目录项记录除页号这个字段以外是唯一的)
    每个页对应一个目录项,每个目录项包括下边两个部分:

聚簇索引

在这里插入图片描述

  • 页的用户记录中最小的主键值,我们用 key 来表示。
  • 页号,我们用page_no 表示。

非聚簇索引

在这里插入图片描述

  • 索引列的值
  • 主键值
  • 页号

之前我们说过索引的构造和用户记录页 很相似,那么InnoDB 怎么区分一条记录是普通的用户记录还是目录项记录呢?别忘了记录头信息里的record_type 属性,它的各个取值代表的意思如下:

  • 0 :普通的用户记录
  • 1 :目录项记录
  • 2 :最小记录
  • 3 :最大记录

索引之间 有类似于 用户记录页 的 双向链表结构。

http://www.xdnf.cn/news/256069.html

相关文章:

  • 模型上下文协议(MCP)
  • 学习记录:DAY22
  • 数字智慧方案5873丨智慧交通设计方案(57页PPT)(文末有下载方式)
  • 动态库与静态库的区别
  • 内置类型成员变量的初始化详解
  • PostgreSQL 的 VACUUM 与 VACUUM FULL 详解
  • 6.DOS
  • 数字世界的“私人车道“:网络切片如何用Python搭建专属通信高速路?
  • 情境领导理论——AI与思维模型【89】
  • 单片机-STM32部分:0、学习资料汇总
  • RISCV的smstateen-ssstateen扩展
  • Flutter——数据库Drift开发详细教程(二)
  • 使用python爬取百度搜索中关于python相关的数据信息
  • 重构编程范式:解码字节跳动 AI 原生 IDE Trae 的技术哲学与实践价值
  • 【数据库】四种连表查询:内连接,外连接,左连接,右连接
  • 【Vue】Vue与UI框架(Element Plus、Ant Design Vue、Vant)
  • 传奇各职业/战士/法师/道士手套/手镯/护腕/神秘腰带爆率及出处产出地/圣战/法神/天尊/祈祷/虹魔/魔血
  • Codex CLI轻量级 AI 编程智能体 :openai又放大招了
  • 西游记4:从弼马温到齐天大圣;太白金星的计划;
  • P1308 统计单词数详解
  • 关于CSDN创作的常用模板内容
  • 人车交叉作业防撞系统介绍
  • 第一章:A Primer on Memory Consistency and Cache Coherence - 2nd Edition
  • 通过具体场景、操作示例和实际命令来具象化 Calico 的功能
  • 动态规划之路径问题1
  • 从括号匹配看栈:数据结构入门的实战与原理
  • 中小企业MES系统需求文档
  • 数控滑台:将制造业推向智能化的关键装备
  • C++_STL
  • 每日算法-250502