6.mysql 索引
发布日期:2021-05-08 05:54:29 浏览次数:22 分类:精选文章

本文共 1127 字,大约阅读时间需要 3 分钟。

索引类型

联合索引

多个字段组成一个索引,查询时遵循最左原则,即优先匹配左边的字段。

单列索引

单列索引分为以下几种:

1.2.1 普通索引
  • 可重复
  • 可含空值(NULL)
1.2.2 唯一索引
  • 不可重复
  • 可有一个 NULL
1.2.3 主键索引
  • 不可重复
  • 不可 NULL
  • 数据库没有自动选择主键索引的能力,需手动定义
1.2.4 全文索引
  • 用于文本关键字查找

MySQL 数据落地文件形式

MySQL 数据库的存储采用不同的文件格式:

2.1 MYISAM
  • Frm:表的定义文件
  • MYD:数据文件,存储所有数据
  • MYI:索引文件
2.2 INNODB
  • Frm:表的定义文件
  • Ibd:数据和索引存储文件
    • 数据以主键进行聚集存储,真正数据保存在叶子节点中

索引数据结构

索引数据结构对比:

3.1 MYISAM
  • 数据和索引分开存储
  • 叶子节点存储记录的页指针
3.2 INNODB
  • 聚集索引
  • 主索引和数据放在一起
  • 辅助索引通过主键值定位数据
3.3 MYISAM vs INNODB
  • MYISAM:非聚集索引,数据和索引分开存储
  • INNODB:聚集索引,主索引和数据存储在一起
3.4 覆盖索引
  • 查询的列全部是索引
  • 直接在索引中查找,避免读取整行数据
  • 提高查询效率

不同实现结构的比较

数据存储结构对比:

4.1 hashmap
  • 定位速度快
  • 无法排序
  • 不适合范围查找
4.2 平衡二叉树
  • 适用于数据量大时
  • 树高较高
  • IO 操作次数多
4.3 B-树
  • 非叶子节点也包含数据
  • 树高较大
  • 范围查找能力较弱
4.4 B+树
  • 所有关键字在叶子节点
  • 叶子节点串联且有序
  • 非叶子节点起到索引作用
  • 范围查找速度快

索引优缺点

索引的优缺点分析:

  • 优点

    • 加快查找和排序速度
    • 减少磁盘IO次数
  • 缺点

    • 占用内存较多
    • 增删改时需要维护索引结构
    • 降低增删改速度

SQL 语句解析

EXPLAIN 语句分析结果解释:

  • id:表执行顺序
  • type
    • All:全表扫描
    • Index:索引表扫描
    • Range:索引中范围查找
    • `Ref**:索引中多值扫描
  • eq_ref:索引唯一确定一个值用于主键或唯一键扫描
  • rows:查找所需扫描的行数
  • key_length:使用的索引列最大字节长度
  • extra
    • using filesort:未使用索引进行排序
    • using temporary:使用了临时表保存排序结果
    • using index:使用了覆盖索引

索引失效情况

索引失效的常见原因及解决方法:

  • 索引列进行计算
  • 发生隐式类型转换
  • 范围查询的右列
  • 空值(NULL)使用 is null 或 != 的比较

参考文章:

上一篇:7.mysql join union
下一篇:5.redo undo

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2025年03月31日 19时49分50秒