Z
ZHANK
编程在线教程SQL 教程索引原理与优化
表设计与索引

索引原理与优化

理解索引 B-Tree、创建索引、覆盖索引、执行计划

索引原理与优化

全表扫描就像一页页翻书找内容。索引是书的目录——让你直接跳到要找的地方。索引是最有效的查询优化手段。

学完本章你将: 理解 B-Tree 索引、创建索引、执行计划、何时索引。


索引是什么

索引是数据库自动维护的一个排序好的数据结构(通常是 B-Tree)。查询时先查索引找到位置,再定位到数据行。

sql
-- 创建索引
CREATE INDEX idx_users_city ON users(city);

-- 有了索引后,这条查询从全表扫描变成索引查找
SELECT * FROM users WHERE city = '北京';

EXPLAIN —— 查看执行计划

sql
-- 看数据库怎么执行你的查询
EXPLAIN QUERY PLAN
SELECT * FROM users WHERE city = '北京';
-- "USING INDEX idx_users_city" → 用了索引 ✅
-- "SCAN users" → 没用到索引,全表扫 ❌

什么时候建索引

✅ 应该建❌ 不应该建
WHERE 经常用的列很少查询的列
JOIN 关联的列频繁更新的列(索引也需维护)
ORDER BY 的列值很少的列(如性别,区分度低)
唯一性约束(自动建索引)小表(全扫也快)

复合索引

sql
-- 多列索引(最左匹配原则)
CREATE INDEX idx_users_city_age ON users(city, age);

-- ✅ 能用到索引
SELECT * FROM users WHERE city = '北京';              -- 最左匹配
SELECT * FROM users WHERE city = '北京' AND age > 20;  -- 全部匹配

-- ❌ 不能用到索引
SELECT * FROM users WHERE age > 20;  -- 跳过了最左列 city