数据库索引
作用
graph TD
subgraph 根节点
A[15, 30]
end
subgraph 内部节点
B[10, 20]
C[20, 25]
end
subgraph 叶子节点
D[5, 8, 10]
E[15, 18, 20]
F[25, 28, 30]
end
A --> B
A --> C
B --> D
B --> E
C --> F
本质
加速数据检索的数据结构,以空间换时间
索引类型
类型 | 数据结构 | 适用场景 |
---|---|---|
B+树索引 | B+树 | 范围查询、排序 |
哈希索引 | 哈希表 | 等值查询 |
全文索引 | 倒排索引 | 文本搜索 |
空间索引 | R树 | 地理数据 |
示例
-- 创建索引
CREATE INDEX idx_name ON users(name);
CREATE UNIQUE INDEX idx_email ON users(email);
-- 复合索引
CREATE INDEX idx_name_age ON employees(name, age);
-- 查看执行计划
EXPLAIN SELECT * FROM users WHERE name = '张三';
注意事项
- 索引不是越多越好,每个索引都需要维护成本
- 遵循最左前缀原则使用复合索引
- 避免在频繁更新的列上建索引
- 索引失效场景:
- 使用函数操作索引列
- 隐式类型转换
- 使用!=或<>操作符
- 使用前导通配符LIKE '%xxx'