数据库索引

一、索引的第一性原理:RUM 猜想

1. RUM 猜想的本质

RUM Conjecture 指出:

对任何索引或数据结构而言,不可能同时在以下三个维度上做到最优:

当系统试图极致优化其中两个维度时,必然以第三个维度的劣化作为代价。

这不是实现限制,而是信息组织与物理约束下的必然结果

2. RUM 是索引设计的"物理定律"

RUM 并不指导"如何实现",而是限定了所有实现的可能空间


二、索引系统的三层抽象模型

为了避免实现细节淹没原理,索引需要被放入一个稳定的认知框架中。

1. 三层模型定义

层级关注点典型问题
原理层不可兼得与权衡为什么不能又快又省?
架构层数据如何组织为什么是树 / 日志 / 位图?
实现层引擎与细节MySQL / InnoDB 如何落地?

后文所有内容,均可映射到这三层之一。


三、索引架构层:数据结构的系统性分类

1. 以 RUM 为中心的索引架构地图

索引架构ReadWriteSpace设计目标
树型索引(B+Tree)稳定低延迟读取
日志结构(LSM)高写入吞吐
近似索引(Bitmap / Bloom)空间与过滤
自适应索引可变可变可变动态负载适应

这张表是全文的结构骨架


四、读取优化导向:树型索引体系

1. 树型索引的设计哲学

树型索引的核心目标是:

其本质是:用空间换确定性的读取性能

2. B 树与 B+ 树的结构差异

在数据库系统中,B+ 树胜出的原因并非算法优雅,而是:

它更符合磁盘页、预读和缓存的物理特性

3. B+ 树的工程优势

这使其成为 OLTP 系统的默认选择。


五、写入优化导向:LSM 架构体系

1. LSM 的设计动机

当写入吞吐成为瓶颈时,树结构频繁的随机写与节点分裂成为主要成本。

LSM 的核心思想是:

将随机写转化为顺序写,再通过后台合并恢复有序性

2. LSM 的核心组件

3. LSM 的权衡代价

这正是 RUM 猜想在现实系统中的体现。


六、空间优化导向:近似与压缩索引

1. 位图索引

位图索引适用于:

其本质是:

用位运算换取极致空间与并行计算效率

2. Bloom Filter

Bloom Filter 不用于定位数据,而用于:

这是一种典型的概率性结构换性能的设计。


七、实现层示例:MySQL / InnoDB 的索引体系

本节属于实现层示例,而非索引原理本身。

1. 聚簇索引与辅助索引

这决定了:

2. 索引匹配与优化器行为

这些规则的共同前提是:

索引的有序性未被破坏


八、索引设计的方法论

索引不是"加不加",而是系统性设计问题。

1. 关键决策维度

  1. 读写比例(R/W)
  2. 查询模式(点查 / 范围 / 扫描)
  3. 数据基数与分布
  4. 数据规模与增长速率
  5. 排序、分组、聚合需求

2. 方法论落点


九、索引的生命周期与治理

索引不是一次性产物,而是需要治理的系统资产。

生命周期阶段

  1. 设计
  2. 构建
  3. 使用
  4. 监控
  5. 演进与清理

治理手段


十、总结:从技术到系统认知

索引的本质不是"加速查询",而是:

在物理约束下,对数据访问路径的长期权衡设计

关联内容(自动生成)