索引原理知识体系概览
问题
数据库索引的核心概念有哪些?为什么索引能加速查询?
答案
什么是索引
索引是数据库中用于 加速数据检索 的数据结构。就像书的目录一样,索引让数据库不需要扫描全部数据就能快速找到目标行。
核心价值
没有索引 → 全表扫描()
有索引 → 索引查找( 或 )
索引的代价
| 优势 | 代价 |
|---|---|
| 加速查询 | 占用存储空间 |
| 快速排序 | 写入时需要维护索引 |
| 加速连接 | INSERT/UPDATE/DELETE 变慢 |
知识体系脑图
各数据库索引对比
| 特性 | MySQL (InnoDB) | PostgreSQL | MongoDB | ES |
|---|---|---|---|---|
| 默认索引结构 | B+ 树 | B-tree | B-tree | 倒排索引 |
| 聚簇索引 | ✅(主键) | ❌(通过 CLUSTER 模拟) | ✅(_id 索引) | - |
| 哈希索引 | Memory 引擎 | ✅ | ✅ | - |
| 全文索引 | ✅(5.6+) | ✅(GIN + tsvector) | ✅(文本索引) | ✅(核心功能) |
| GiST/GIN | ❌ | ✅ | - | - |
| 部分索引 | ❌ | ✅ | ✅ | - |
| 函数索引 | ✅(8.0+) | ✅ | - | - |
| TTL 索引 | ❌ | ❌ | ✅ | ✅(ILM) |
面试重点
| 知识点 | 重要度 | 高频问题 |
|---|---|---|
| B+ 树结构 | ⭐⭐⭐⭐⭐ | 为什么用 B+ 树不用 B 树/红黑树/跳表 |
| 聚簇 vs 非聚簇 | ⭐⭐⭐⭐⭐ | 回表是什么?如何避免 |
| 联合索引 | ⭐⭐⭐⭐⭐ | 最左前缀原则 |
| 覆盖索引 | ⭐⭐⭐⭐⭐ | 什么是覆盖索引,怎么用 |
| 索引失效 | ⭐⭐⭐⭐⭐ | 哪些情况导致索引失效 |
| 哈希索引 | ⭐⭐⭐ | 哈希索引 vs B+ 树索引 |
| 索引设计 | ⭐⭐⭐⭐ | 如何合理设计索引 |
本分类文档导航
| 文档 | 内容 |
|---|---|
| B+ 树索引 | B+ 树结构、为什么选 B+ 树、聚簇/非聚簇索引 |
| 哈希索引 | 哈希索引原理、适用场景、自适应哈希 |
| 覆盖索引 | 覆盖索引原理、回表问题、使用技巧 |
| 联合索引 | 联合索引结构、最左前缀、索引下推 |
| 索引优化实战 | 索引失效、设计原则、优化案例 |