MySQL索引设计原则 MySQL
MySQL索引设计原则
引言
MySQL索引相当于书籍目录,快速定位数据,避免全表扫描。不合理的索引不仅无法提升查询速度,还会降低写入性能。索引设计是数据库优化最基础、最高效的手段,建站、接口开发都需要掌握。
索引核心原理
InnoDB引擎索引基于B+树实现,主键索引叶子节点存储完整行数据;二级索引叶子节点存储主键值,查询会触发回表。索引字段越大,占用磁盘越多,内存缓存能存放的索引越少,查询越慢。
索引设计核心原则
- 选择性优先:优先给区分度高的字段建索引,如手机号、ID;性别、状态这类只有少量枚举值字段不适合单独建索引。
- 联合索引遵循最左匹配原则,字段顺序:等值查询在前,范围查询放后面。
- 避免在索引字段做函数运算,
where YEAR(create_time)=2026会直接失效索引。 - 不要过度建索引,每次新增、更新、删除数据,所有索引都需要同步更新,拖累写入。
示例SQL
-- 联合索引示例,适合 where uid=100 and create_time>xxx
CREATE INDEX idx_uid_ct ON user(uid,create_time);
-- 查看sql是否命中索引
EXPLAIN SELECT * FROM user WHERE uid=100;
常见踩坑
- 字符串字段不加引号,隐式类型转换,索引失效;
- 模糊查询
%关键词,前置百分号不走索引; - 联合索引跳过左侧字段,无法触发索引。
总结
索引不是越多越好,按需创建。建索引前先用explain分析执行计划,优先优化高频查询SQL,控制索引数量,平衡查询与写入性能。
MySQL 死锁的排查与解决入门教程(新手必看) MySQL
最近在项目里又遇到了死锁的排查与解决的典型问题,索性把解决方法整理成这篇文章,希望能帮到遇到同样问题的同学。
MySQL utf8mb4字符集快速上手指南(新手必看) MySQL
做MySQL开发这几年,utf8mb4字符集是被身边同事问得最多的问题之一。今天把答案整理出来,供大家参考。
MySQL GROUP BY分组统计实战详解(新手必看) MySQL
很多初学者在学习MySQL时,都会遇到GROUP BY分组统计相关的问题。网上的资料零散且质量参差不齐,本文尝试用一篇文章把GROUP BY分组统计讲清楚。
MySQL NULL值的注意事项快速上手指南(附代码示例) MySQL
在日常MySQL开发中,NULL值的注意事项是一个出现频率非常高的话题。无论是新手还是有一定经验的开发者,都可能在细节上踩坑。本文将系统地梳理NULL值的注意事项的相关知识,并给出可以直接运行的示例代码。
MySQL 数据库连接数配置实战详解(附代码示例) MySQL
数据库连接数配置是MySQL开发者必须掌握的基础技能之一。掌握它不仅能提升开发效率,还能避免很多隐蔽的 Bug。
MySQL GROUP BY分组统计避坑指南(建议收藏) MySQL
很多线上 Bug 的根源,都在于对GROUP BY分组统计的理解不够深入。本文从常见错误出发,反推正确的使用姿势。
MySQL DISTINCT去重查询进阶技巧分享(完整版) MySQL
最近在项目里又遇到了DISTINCT去重查询的典型问题,索性把解决方法整理成这篇文章,希望能帮到遇到同样问题的同学。