数据库索引
作用
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'