Mysql--10

一、索引核心定义与优缺点

定义 :索引是帮助 MySQL 高效获取数据的有序数据结构,通过额外维护的数据结构引用数据,实现快速查找。

表格

优势 劣势
提升检索效率,降低数据库 I/O 成本 占用额外存储空间
降低数据排序成本与 CPU 消耗 降低 INSERT/UPDATE/DELETE 等更新操作的效率

二、索引分类
1. 逻辑分类

表格

分类 含义 特点 关键字
主键索引 针对表主键创建的索引 默认自动创建,仅能有一个 PRIMARY
唯一索引 避免列值重复 可存在多个 UNIQUE
常规索引 快速定位数据 可存在多个 -
全文索引 匹配文本关键词 可存在多个 FULLTEXT
2. InnoDB 存储形式分类

表格

分类 含义 特点
聚集索引 数据与索引存储在一起,叶子节点保存完整行数据 必须有且仅有一个
二级索引 数据与索引分离,叶子节点关联主键 可存在多个

聚集索引选取规则

  • 有主键 → 主键索引即聚集索引
  • 无主键 → 取第一个唯一索引作为聚集索引
  • 无主键且无合适唯一索引 → InnoDB 自动生成隐藏 rowid 作为聚集索引

三、主流索引结构
1. B+Tree(MySQL 核心索引结构)
  • 结构特征
    • 最大度数为 4(4 阶)的 B+Tree 中,每个节点最多存储 3 个键值、4 个指针
    • 所有数据存储在叶子节点,非叶子节点仅存导航键值
    • 叶子节点通过双向链表连接,支持高效范围查询与排序
  • 与 B-Tree 区别
    1. 所有数据均在叶子节点,B-Tree 数据可分布在任意节点
    2. 叶子节点形成有序链表,区间访问性能更优
2. Hash 索引
  • 实现:通过哈希算法将键值映射到哈希表,冲突用链表解决
  • 特点
    • 仅支持等值查询(=IN),不支持范围查询
    • 无法利用索引完成排序
    • 查询效率通常高于 B+Tree,单次检索即可定位数据
  • 引擎支持
    • Memory 引擎原生支持
    • InnoDB 引擎提供自适应 Hash 功能,基于 B+Tree 自动构建
3. 其他索引结构

表格

类型 描述 适用场景
R-tree MyISAM 专属空间索引 地理空间数据类型
Full-text 倒排索引实现 全文检索场景

四、存储引擎对索引的支持

表格

索引类型 InnoDB MyISAM Memory
B+Tree 支持 支持 支持
Hash 自适应支持 不支持 原生支持
R-tree 不支持 支持 不支持
Full-text 5.6+ 支持 支持 不支持
相关推荐
CoderMeijun6 小时前
一条SQL查询语句在MySQL中是如何执行的
mysql·sql执行流程·连接器·mysql架构·索引下推·执行器
ttwuai10 小时前
GoFrame 连接 MySQL 报错排查:parseTime、时区和 utf8mb4 怎么配
数据库·mysql·adb
辉灰笔记10 小时前
MySQL8 意外关机/误移data目录导致服务启动失败 PID报错/权限报错 修复文档
linux·数据库·mysql·centos
喜欢的名字被抢了11 小时前
MySQL核心机制:事务、锁与存储引擎
数据库·sql·mysql·教程
消失的旧时光-194312 小时前
MySQL 索引原理系列(二·补充):MySQL 为什么不用红黑树,而用 B+树?
数据库·b树·mysql·红黑树
万亿少女的梦16813 小时前
基于Spring Boot、Vue.js和MySQL的超市管理系统设计与实现
java·vue.js·spring boot·mysql·管理系统
weixin_3077791313 小时前
Linux下Docker Compose里运行的MySQL数据库故障诊断Shell脚本
linux·运维·mysql·docker·自动化
辉灰笔记16 小时前
第一篇:MySQL8.0生产备份实战|XtraBackup全自动全量+增量备份(钉钉告警+异地Binlog归档)
数据库·mysql·钉钉·运维开发
wzy062316 小时前
VIP + Orchestrator + 自定义脚本 MySQL 高可用方案
mysql·orchestrator
TPBoreas1 天前
MySQL性能优化面试全攻略
mysql·面试·性能优化