
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 或 != 的比较
参考文章:
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2025年03月31日 19时49分50秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
MySQL用户管理:添加用户、授权、删除用户
2019-03-06
比技术还重要的事
2019-03-06
linux线程调度策略
2019-03-06
软中断和实时性
2019-03-06
Linux探测工具BCC(可观测性)
2019-03-06
Opentelemetry Metrics SDK
2019-03-06
流量控制--2.传统的流量控制元素
2019-03-06
SNMP介绍及使用,超有用,建议收藏!
2019-03-06
SDUT2161:Simple Game(NIM博弈+巴什博弈)
2019-03-06
51nod 1596 搬货物(二进制处理)
2019-03-06
来自星星的祝福(容斥+排列组合)
2019-03-06
Hmz 的女装(递推)
2019-03-06
HDU5589:Tree(莫队+01字典树)
2019-03-06
不停机替换线上代码? 你没听错,Arthas它能做到
2019-03-06
sharding-jdbc 分库分表的 4种分片策略,还蛮简单的
2019-03-06
分库分表的 9种分布式主键ID 生成方案,挺全乎的
2019-03-06
MySQL不会丢失数据的秘密,就藏在它的 7种日志里
2019-03-06
Python网络编程之socket应用
2019-03-06
Python开发之序列化与反序列化:pickle、json模块使用详解
2019-03-06