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+ 支持 支持 不支持
相关推荐
渣渣盟16 小时前
Mysql入门到精通全集(SQL99)包含关系运算,软考数据库工程师复习首选
数据库·mysql·oracle
2301_8084143817 小时前
MySQL中的函数
数据库·mysql
Mahir0817 小时前
MySQL 数据一致性的基石:三大日志( redo log/undo log/binlog)与两阶段提交(Prepare 阶段和Commit 阶段)深度解密
数据库·后端·mysql·面试
jiayong2319 小时前
MySQL 8.0 Root 用户远程登录配置完整指南
数据库·mysql
@小柯555m20 小时前
MySql(高级查询--查找GPA最高值)
数据库·sql·mysql
轻刀快马20 小时前
穿透 MySQL 索引专栏 (五):【架构哲学】性能调优的终局之战:深分页灾难与千万级大表的索引设计原则
数据库·mysql·架构
whn197721 小时前
centos10.1上安装mysql 9.6
数据库·mysql
oldking呐呐21 小时前
MySQL从建库到删库跑路 -- 5.数据类型
mysql
黄俊懿21 小时前
复合索引设计指南:最左前缀 & 字段排座次
数据库·sql·mysql·adb·性能优化·dba·db
Fan_-_1 天前
MySQL / PostgreSQL DDL 审核自动化:从人工 review 到 CI 拦截
mysql·postgresql·自动化