一、问题背景
当数据量达到千万、亿级时,如何在海量数据中快速查找某条记录?
核心矛盾:
- 内存放不下所有数据 → 必须依赖磁盘
- 磁盘 IO 极慢(毫秒级 vs 内存纳秒级)→ 必须减少 IO 次数
- 数据持续增长 → 索引必须支持动态插入/删除
二、索引的需求定义
以数据库为例,索引需支持:
| 需求类型 | 示例 |
|---|---|
| 等值查询 | WHERE id = 1234 |
| 区间查询 | WHERE id BETWEEN 1000 AND 2000 |
| 前缀匹配 | WHERE name LIKE '张%' |
| 排序 | ORDER BY create_time DESC |
性能约束:
- 查询尽可能少磁盘 IO
- 索引本身不能占太多内存
- 写入时索引维护代价可控