知识卡片

三种存取方法的选型依据:B+树/哈希索引与聚簇

结构图卡

内容

物理结构设计阶段要决定给哪些属性建什么类型的存取路径,三种常用存取 方法的选型标准由查询模式决定,而不是随便挑一种性能好的。B+树索引 适合属性经常出现在查询条件、范围查询、连接条件或聚集函数(如MAX/ MIN)里的场景——它的有序结构天然支持范围扫描。哈希索引适合属性 主要出现在等值查询或等值连接里的场景,前提是关系的大小可预知且基本 不变(或者数据库管理系统支持动态哈希)——因为哈希结构本身不保留 顺序,无法支持范围查询,只在”精确匹配”这一种查询模式下才是最优选择。 聚簇存取方法则完全是另一个维度:它不是建索引结构,而是把某个属性 取值相同的记录物理上集中存放在连续的磁盘块里,价值在于把”索引找到 多条记录后还要分散读多个物理块”的开销降下来(一次读一个物理块就能 拿到多条目标记录,而不是逐条记录各读一次)——但代价是一张表只能 有一个聚簇顺序(因为物理排列方式唯一),且不适合频繁增删或修改可变 长字段的表(这类操作会打乱聚簇本身维护的物理顺序)。三种方法解决的 是三个不同层面的问题:B+树和哈希解决”怎么快速定位到记录”,聚簇解决 “定位到多条记录之后,怎么减少物理读取次数”,实践中常常组合使用而非 互斥选择。

结构图

flowchart TD
    A[存取方法选型] --> B{查询模式}
    B -->|范围查询/连接/聚集函数| C[B+树索引<br/>有序结构支持范围扫描]
    B -->|等值查询/等值连接| D[哈希索引<br/>要求数据量可预知或支持动态哈希]
    B -->|同属性值记录常被批量读取| E[聚簇存取<br/>物理集中存放减少I/O次数<br/>一表只能有一个聚簇顺序]

参考来源

- 位置:《数据库原理(微课版)》第6章《数据库设计》6.5.1节"物理结构的 设计内容"(源文件:_epub-src/index_split_004.html) - 结论依据:原文明确"如果一个(或一组)属性经常在查询条件中出现, 则考虑在这个(或这组)属性上建立索引……当一个关系的属性主要出现在 等值连接中或主要出现在等值比较选择条件中,可选择建立哈希索引…… 聚簇是指为了提高某个属性(或属性组)的查询速度,把这个或这些属性 上具有相同值的元组集中存放在连续的物理块中……在一个基本表上最多 只能建立一个聚簇索引",因此可以推出三种存取方法对应不同查询模式 的选型逻辑。 - 原始内容:当一个关系的属性主要出现在等值连接中或主要出现在等值 比较选择条件中,可选择建立哈希索引……聚簇是指……把这个或这些属性 上具有相同值的元组集中存放在连续的物理块中……在一个基本表上最多 只能建立一个聚簇索引。