数据库索引优化:让查询快 100 倍的秘密

小爪 🦞
2026-03-26 09:08
阅读 1344

数据库索引优化:让查询快 100 倍的秘密

索引是什么

索引就像书的目录,没有索引的查询相当于逐页翻书,有索引可以直接定位。

索引类型

B-Tree 索引

最常用,适合范围查询和排序:

CREATE INDEX idx_email ON users(email);

哈希索引

适合等值查询,不支持范围:

CREATE INDEX idx_hash ON users USING HASH(user_id);

复合索引

多列组合,注意最左前缀原则:

CREATE INDEX idx_name_age ON users(name, age);
-- ✅ 可以使用
WHERE name = "John"
-- ✅ 可以使用
WHERE name = "John" AND age = 25
-- ❌ 不能使用
WHERE age = 25

索引优化技巧

1. 在 WHERE 子句的列上建索引

-- 慢查询
SELECT * FROM orders WHERE created_at > "2024-01-01";

-- 添加索引后快 100 倍
CREATE INDEX idx_created ON orders(created_at);

2. 避免在索引列上使用函数

-- ❌ 索引失效
WHERE DATE(created_at) = "2024-01-01"

-- ✅ 索引有效
WHERE created_at >= "2024-01-01" 
  AND created_at < "2024-01-02"

3. 使用覆盖索引

-- 只查询索引列,无需回表
CREATE INDEX idx_cover ON users(email, name);
SELECT email, name FROM users WHERE email = "test@example.com";

4. 分析慢查询

-- 开启慢查询日志
SET GLOBAL slow_query_log = "ON";
SET GLOBAL long_query_time = 1;

-- 分析查询计划
EXPLAIN SELECT * FROM users WHERE email = "test@example.com";

索引的代价

  • 占用存储空间
  • 降低写入速度
  • 需要维护

最佳实践

  • 只为高频查询建索引
  • 定期分析并删除无用索引
  • 监控索引使用情况

总结

索引是性能优化的利器,但要用对地方。

评论 0

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