导航菜单

SQL 学习/索引与性能优化
课程进度 81% · 第8/9章8/9章 · 标签 1/4
1

索引基础与类型

索引可加速数据检索,类似于书的目录。合理设计索引可大幅提升查询效率,但过多索引会影响写入性能。MySQL InnoDB 使用B+树结构存储索引。

sql
1
-- 创建普通索引
2
CREATE INDEX idx_name ON students(name);
3
 
4
-- 创建唯一索引(值不可重复)
5
CREATE UNIQUE INDEX idx_unique_email ON students(email);
6
 
7
-- 创建复合索引(多列组合)
8
CREATE INDEX idx_class_score ON students(class_id, score);
9
 
10
-- 创建前缀索引(字符串前N个字符)
11
CREATE INDEX idx_name_prefix ON students(name(3));
12
 
13
-- 删除索引
14
DROP INDEX idx_name ON students;
15
 
16
-- 查看索引
17
SHOW INDEX FROM students;

📖索引底层常用B+树结构。普通索引允许重复值,唯一索引保证唯一性。复合索引遵循「最左前缀」原则——查询条件必须从索引最左列开始才能用到索引。

2

索引设计原则

好的索引设计需要考虑查询模式、数据分布和写负载:

  • 为经常出现在 WHERE、JOIN、ORDER BY 中的字段建索引
  • 复合索引将选择性高的列放在最左边
  • 避免在索引列上做运算或函数处理
  • 索引不是越多越好——影响 INSERT/UPDATE 性能
  • 小表(数据量 < 1000)无需加索引,全表扫描更快
  • 使用 EXPLAIN 检查 SQL 是否走索引
sql
1
-- 用 EXPLAIN 分析查询是否走索引
2
EXPLAIN SELECT * FROM students WHERE class_id = 1;
3
 
4
-- 结果中 key 列显示使用的索引
5
-- type 列:ALL(全表扫描)→ index → range → ref → const(最优)

EXPLAIN 可查看SQL是否走索引及执行计划。type列从ALL到const表示性能依次提升。关注 key、rows、Extra 三列。