索引原理专题
索引是 MySQL 性能优化的核心,理解索引的底层原理和优化技巧是面试的必考内容。
常见题型
| 题型 | 核心知识点 | 典型问题 |
|---|---|---|
| 索引结构 | B+树、Hash | 为什么用 B+树、B+树 vs B 树 |
| 索引类型 | 聚簇、非聚簇、联合 | 聚簇索引 vs 非聚簇索引、最左前缀 |
| 索引优化 | 覆盖索引、索引下推 | 什么是覆盖索引、ICP 优化 |
| 执行计划 | EXPLAIN、type、key | EXPLAIN 各字段含义 |
| 索引失效 | 隐式转换、函数运算 | 什么时候索引会失效 |
索引数据结构对比
| 结构 | 查找 | 范围查询 | 顺序 I/O | MySQL 使用 |
|---|---|---|---|---|
| B+树 | O(log n) | ✓ | ✓ | ✓ (InnoDB, MyISAM) |
| Hash | O(1) | ✗ | ✗ | ✓ (Memory) |
| B 树 | O(log n) | ✓ | ✗ | ✗ |
| 二叉树 | O(log n) | ✗ | ✗ | ✗ |
索引类型对比
| 类型 | 特点 | 存储方式 | 数量限制 |
|---|---|---|---|
| 聚簇索引 | 数据和索引在一起 | 主键索引 | 1 个 |
| 非聚簇索引 | 索引和数据分离 | 辅助索引 | 多个 |
| 联合索引 | 多个字段组合 | B+树 | 多个 |
| 全文索引 | 全文搜索 | 倒排索引 | 多个 |
| 哈希索引 | 等值查询 | Hash 表 | 自适应 |
索引优化技巧
| 优化 | 原理 | 效果 |
|---|---|---|
| 覆盖索引 | 索引包含所需字段 | 避免回表 |
| 最左前缀 | 联合索引从左匹配 | 减少索引数量 |
| 索引下推 | 存储层过滤数据 | 减少 IO |
| 前缀索引 | 只索引前几个字符 | 节省空间 |
