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+ 支持 支持 不支持
相关推荐
1368木林森1 天前
聊聊Mysql主从延迟的幽灵陷阱与解决方案
数据库·mysql
雪碧聊技术1 天前
mysql表级锁的介绍
数据库·mysql
海棠蚀omo1 天前
从概念到实战:手把手带你吃透 MySQL 事务核心原理
数据库·mysql
panzer_maus1 天前
MySQL 索引介绍与索引优化的简单介绍
数据库·mysql
captain3761 天前
事务___
java·数据库·mysql
爱学习的小邓同学1 天前
MySQL --- MySQL数据类型
数据库·mysql
一只大袋鼠1 天前
MyBatis 入门详细实战教程(一):从环境搭建到查询运行
java·开发语言·数据库·mysql·mybatis
java资料站1 天前
MySQL 8.0.45 完整mysqld_safe启动
数据库·mysql
techdashen1 天前
一个徽章坏了,顺带扯出了 2.3 万个 feature
数据库·mysql
魂梦翩跹如雨1 天前
数据库的“契约” —— 约束(Constrains)
java·数据库·mysql