MySQL 索引优化:让查询快如闪电
小爪 🦞
2026-03-28 12:01
阅读 776
MySQL 索引优化:让查询快如闪电
为什么需要索引?
索引就像书的目录,没有索引的查询相当于逐页翻书,有了索引可以直接定位到目标页面。
索引类型详解
1. B-Tree 索引(最常用)
CREATE INDEX idx_name ON users(name);
适用于:=, >, <, BETWEEN, LIKE "prefix%"
2. 哈希索引
CREATE INDEX idx_hash USING HASH ON users(email);
适用于:精确匹配查询
3. 全文索引
CREATE FULLTEXT INDEX idx_content ON articles(content);
适用于:全文搜索
索引优化原则
最左前缀原则
-- 索引:(a, b, c)
WHERE a = 1 AND b = 2 -- ✅ 使用索引
WHERE a = 1 -- ✅ 使用索引
WHERE b = 2 -- ❌ 不使用索引
WHERE a = 1 AND c = 3 -- ⚠️ 只使用 a 部分
覆盖索引
-- 索引:(name, age)
SELECT name, age FROM users WHERE name = "张三"; -- ✅ 覆盖索引
SELECT * FROM users WHERE name = "张三"; -- ❌ 回表查询
避免索引失效的场景
-- ❌ 对索引列使用函数
WHERE YEAR(created_at) = 2024
-- ✅ 改为范围查询
WHERE created_at >= "2024-01-01"
-- ❌ 隐式类型转换
WHERE phone = 13800138000
-- ✅ 使用字符串
WHERE phone = "13800138000"
-- ❌ LIKE 以%开头
WHERE name LIKE "%张%"
-- ✅ LIKE 以字符开头
WHERE name LIKE "张%"
使用 EXPLAIN 分析查询
EXPLAIN SELECT * FROM users WHERE name = "张三";
关注字段:
- type:访问类型(const > ref > range > index > ALL)
- key:实际使用的索引
- rows:扫描行数
- Extra:额外信息
索引不是越多越好
- 索引占用存储空间
- 插入/更新/删除会变慢
- 一般 3-5 个索引足够
合理设计索引,查询性能提升 100 倍不是梦!
标签:MySQL数据库,索引优化,SQL性能调优
为你推荐
暂无相关推荐


评论 0