课程进度 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 三列。