---
title: "向量索引 - OceanBase 数据库 V4.6.0 | OceanBase 文档中心"
description: 向量索引 本文介绍 HNSW 系列索引和 IVF 系列索引的原理。 HNSW 系列索引 OceanBase 数据库的 HNSW 向量索引，分为静态基线索引和动态增量索引两部分：静态基线索引只读，一旦生成不再修改；动态增量索引支持读写。DML（插入、更新、删除）先写入动态增量索引；当增量达到一定规模时转储到磁盘。查询时…
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 4.6.0

# 向量索引

更新时间：2026-06-29 11:29:36

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.6.0/zh-CN/700.reference/100.oceanbase-database-concepts/400.database-objects/200.database-objects-of-mysql-mode/300.index-of-mysql-mode/330.vector-indexes-of-mysql-mode-in-concepts.md)  

本文介绍 HNSW 系列索引和 IVF 系列索引的原理。

## HNSW 系列索引

OceanBase 数据库的 HNSW 向量索引，分为静态基线索引和动态增量索引两部分：静态基线索引只读，一旦生成不再修改；动态增量索引支持读写。DML（插入、更新、删除）先写入动态增量索引；当增量达到一定规模时转储到磁盘。查询时分别查询静态基线索引和动态增量索引，将结果归并后返回给 SQL 层。 当增量部分达到一定规模时，会触发增量与基线的合并，以控制 Segment 数量、保证查询性能。

### 索引存储

#### 数据组织

向量索引的数据组织引入了段（Segment）概念，分区内按段组织数据。引入持久化增量后，存在四类段：

![](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/observer/V4.6.0/HNSW%E7%B4%A2%E5%BC%95segment%EF%BC%88%E6%A8%AA%EF%BC%89.png)

| 段 | 说明 | 存储位置 | 读写 |
| --- | --- | --- | --- |
| 基线索引 | 全量重建产生的只读索引 | 磁盘 | 只读 |
| 活跃增量 | 内存中可写的增量索引 | 内存 | 读写 |
| 冻结增量 | 活跃增量满后冻结 | 内存 | 只读 |
| 已持久化增量 | 冻结后落盘的增量 | 磁盘 | 只读 |

其他说明：

- 单分区仅有一个基线段，可有多个增量段。
 - 增量段可能含未提交/回滚数据，需配合可见性位图过滤。

### 转储与合并

#### 转储

将内存中的增量数据持久化到磁盘，并收缩日志表，主要流程如下：

1. 冻结：当活跃增量达到阈值（如内存/行数），将其冻结（不再写入） → 产生冻结增量
 2. 持久化：将冻结增量序列化，写入磁盘存储
 3. 更新元数据：更新索引的元数据（版本号、段列表）

#### 合并

| 类型 | 触发条件 | 作用 |
| --- | --- | --- |
| 增量合并 | 已持久化增量 ≥ 2 个 | 合并多个增量，减少查询时的归并开销 |
| 基线重建 | 增量向量数超过基线 | 全量重建，生成新的只读基线索引 |

#### 说明

合并可同时做量化压缩（如 FP32 → SQ/BQ），节省存储空间。

### 过滤器

查询时支持两种过滤器：

| 场景 | 说明 |
| --- | --- |
| Pre_filter | 先过滤主表数据，再查向量索引（适合过滤条件筛选性强的场景） |
| Post_filter | 查询向量索引后，在候选结果上过滤（适合大多数向量结果都有效的情况） |

### 常见问题

Q：为什么要分基线和增量两阶段构建？  
 A：向量索引库（HNSW）构建索引代价高，不适合频繁更新。改为：

- 基线：只读，定期全量重建，适合查询。
 - 增量：内存可写，支持实时 DML，定期合并到基线。

## IVF 系列索引

IVF 系列索引是基于倒排的向量索引，通过聚类算法将高维向量空间划分为 `nlist` 个由聚类中心点（Centroids）定义的子区域，每个聚类中心关联一个倒排桶，用于存储归属于该区域的向量（或其量化压缩编码）。搜索时只访问与查询向量最相近的若干桶，从而在计算开销与检索精度之间取得了平衡。

### 索引内部结构

IVF 系列索引在逻辑上可分为两层：

- 聚类中心层（粗聚类层）：维护 `nlist` 个中心向量，用于决定查询应优先探测哪些桶。搜索参数 `nprobe` 表示选取距离查询最近的若干个中心所对应的桶。
 - 倒排桶数据层：每个中心对应一个桶，桶内存储落入该聚类区域的向量条目（可配合乘积量化等压缩表示）。

聚类中心层（粗聚类层）有两种主要的物理组织方式，分别适用于不同规模的 `nlist`：

| 组织形式 | 适用场景 | 搜索方式 | 特点 |
| --- | --- | --- | --- |
| ARRAY | nlist 较小 | 线性距离计算后排序选 top | 实现简洁，开销常数小 |
| HGRAPH | nlist 较大 | 图结构遍历 | 支持大规模中心，高效 |

在实际应用中，中心加载入内存后会根据规模自动选用最佳组织方式。当 `nlist` 未达到阈值时，采用 `ARRAY` 结构；超过阈值则构建 `HGraph`，并根据实现策略可以释放原有的大块连续数组，后续均通过统一接口访问中心信息。

## 相关文档

- 语法与参数说明、创建/搜索/删除示例请参见 [HNSW 系列索引](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005682591)。
 - IVF 系列索引原理请参见 [IVF 系列索引](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005682588)。
 - 稠密索引类型总览与选取建议请参见 [稠密索引概述](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005682589)。
 - 向量索引内存与持久化控制请参见 [向量索引内存管理](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005682091)。

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
