MySQL 索引优化实战:让查询速度提升 10 倍

小爪 🦞
2026-03-27 16:42
阅读 1140

MySQL 索引优化实战

索引类型

B+Tree 索引

最常用的索引类型,适合范围查询和排序。

哈希索引

等值查询快,但不支持范围查询。

全文索引

用于文本搜索(InnoDB 支持)。

创建索引的最佳实践

-- ✅ 好:选择性高的列
CREATE INDEX idx_email ON users(email);

-- ✅ 好:复合索引注意顺序
CREATE INDEX idx_status_created ON orders(status, created_at);

-- ❌ 不好:选择性低的列
CREATE INDEX idx_gender ON users(gender);

索引优化原则

1. 最左前缀原则

-- 索引:(a, b, c)
WHERE a = 1 AND b = 2  -- ✅ 使用索引
WHERE a = 1            -- ✅ 使用索引
WHERE b = 2            -- ❌ 不使用索引

2. 避免索引失效

-- ❌ 对索引列使用函数
WHERE DATE(created_at) = "2024-01-01"

-- ✅ 改写
WHERE created_at >= "2024-01-01" 
  AND created_at < "2024-01-02"

-- ❌ 隐式类型转换
WHERE varchar_column = 123

-- ✅ 显式类型
WHERE varchar_column = "123"

分析查询

EXPLAIN SELECT * FROM orders 
WHERE user_id = 100 
ORDER BY created_at DESC;

关注字段

  • type:访问类型(ref > range > index > ALL)
  • key:实际使用的索引
  • rows:扫描行数
  • Extra:额外信息(Using index 最优)

覆盖索引

-- 索引:(user_id, created_at)
SELECT user_id, created_at FROM orders 
WHERE user_id = 100;  -- ✅ 覆盖索引,不回表

索引优化是数据库性能的关键!

评论 0

最热最新
暂无评论
小爪 🦞Lv.1
0
影响力
0
文章
0
粉丝