---
title: "IVF 系列索引 - OceanBase 数据库 V4.5.0 | OceanBase 文档中心"
description: IVF 系列索引 本文档介绍了 OceanBase 数据库的稠密索引 IVF 系列索引的创建、搜索、删除语法说明及示例。 索引语法及说明 创建 IVF 系列索引包含 IVF 和 IVF_PQ 两种索引。IVF 索引的聚类中心构建需要依赖于主表的数据，为了保证 IVF 索引的正常使用，仅放开后建 IVF 索引功能，即创…
---
切换语言

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

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

# IVF 系列索引

更新时间：2026-02-25 12:40:11

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.5.0/zh-CN/640.ob-vector-search/200.ob-vector-index/300.ob-dense-vector-index/300.ob-ivf-index.md)  

本文档介绍了 OceanBase 数据库的稠密索引 IVF 系列索引的创建、搜索、删除语法说明及示例。

## 索引语法及说明

### 创建

IVF 系列索引包含 IVF 和 IVF_PQ 两种索引。IVF 索引的聚类中心构建需要依赖于主表的数据，为了保证 IVF 索引的正常使用，仅放开后建 IVF 索引功能，即创建主表且完成数据导入后再新建 IVF 索引。其创建仅支持**后建**方式。创建时需要注意：

- 如果数据量较大，建议先写完数据，再创建索引，以获得最佳搜索性能。
 - IVF/IVF_PQ 索引均建议在写入数据后再创建索引，并在写入较多增量数据后进行索引重建。每个索引具体的创建说明见下文具体示例。
 - 创建 IVF 索引时，索引名长度暂不支持超过 33 个字符，否则可能因为索引辅助表名长度超过 `index_name` 限制导致异常。未来版本会支持更长的索引名。

后建索引语法：

```sql
-- 后建索引支持设置并行度，以提升索引构建性能，并行度最大设置不超过 CPU 核数 * 2
CREATE [/*+ paralell $value*/] VECTOR INDEX index_name ON table_name(column_name2) WITH (param1=value1, param2=value2, ...);

```

`param` 参数说明：

| 参数 | 默认值 | 取值范围 | 是否必填 | 说明 | 备注 |
| --- | --- | --- | --- | --- | --- |
| distance |  | l2/inner_product/cosine | 是 | 指定向量距离算法类型。 | l2 表示欧氏距离，inner_product 表示内积距离，cosine 表示余弦距离。 |
| type |  | ivf_flat/ivf_pq | 是 | 指定 IVF 索引类型。 | |
| lib | ob | ob | 否 | 指定向量索引库类型。 | |
| nlist | 128 | [1,65536] | 否 | 聚类中心的个数。 | |
| sample_per_nlist | 256 | [1,int64_max] | 是 | 每个聚类中心的取样的数据量，后建索引中使用。 | |
| nbits | 8 | [1,24] | 否 | 指定量化位数。   #### 注意    该参数仅在创建 IVF_PQ 索引时可指定。 | 建议取值为 8，建议取值范围为 [8,10]。该值越大，量化精度越高，搜索准确率越高，同时搜索性能会受到影响。 |
| m | 无默认值，必须指定 | [1,65536] | 是 | 指定量化后的向量维度。   #### 注意    该参数仅在创建 IVF_PQ 索引时可指定。 | 该值越大，索引构建越慢，搜索准确率越高，同时搜索性能会受到影响。 |

### 搜索

IVF 系列索引的搜索是一种近似最近邻（ANN）搜索，不保证 100% 的结果准确性。衡量其准确率的指标是召回率，例如在查询 10 个最近邻时，若能稳定返回 9 个正确结果，则召回率为 90%。

```sql
SELECT ... FROM table_name
ORDER BY distance_function(column_name, vector_expr) [APPROXIMATE|APPROX]
LIMIT num (OFFSET num);

```

**搜索语法要求：**

- 必须指定 `APPROXIMATE`/`APPROX` 关键字，搜索才会使用向量索引而非全表扫描。
 - 必须包含 `ORDER BY` 和 `LIMIT` 子句。
 - `ORDER BY` 只支持单个向量条件。
 - `LIMIT + OFFSET` 的取值范围为 `(0, 16384]`。
 - 不指定 `LIMIT` 子句会报错。

**距离函数使用规则：**

- 指定 `APPROXIMATE`/`APPROX`，调用当前版本支持的距离函数，且与向量索引算法匹配，搜索会使用向量索引。
 - 指定 `APPROXIMATE`/`APPROX`，距离函数与向量索引算法不匹配，搜索不会使用向量索引，但也不会报错。
 - 指定 `APPROXIMATE`/`APPROX`，如果距离函数为当前版本不支持的距离函数，搜索不会使用向量索引，且会报错。
 - 未指定 `APPROXIMATE`/`APPROX`，调用当前版本支持的距离函数，搜索不会使用向量索引，但也不会报错。

**其他说明：**

- `WHERE` 条件会作为向量索引搜索的过滤条件。
 - 召回率受构建参数和搜索参数的影响。
 - 索引搜索参数在建索引时指定，之后不可修改。但可通过 session 变量 `ob_ivf_nprobes` 设置搜索时的聚类中心数量。如果设置了 session 变量，会优先使用它的值。具体设置方式请参见 [ob_ivf_nprobes](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004478778)。

### 删除

删除向量索引的语法如下：

```sql
DROP INDEX index_name ON table_name;

```

## 创建、搜索及删除示例

### 后建

创建测试表。

```sql
CREATE TABLE vec_table_ivf (c1 INT, c2 VECTOR(3), PRIMARY KEY(c1));

```

创建 IVF 索引。

```sql
CREATE VECTOR INDEX vec_idx3 ON vec_table_ivf(c2) WITH (distance=l2, type=ivf_flat);

```

### 删除

```sql
DROP INDEX vec_idx1 ON vec_table;

```

查看删除的索引。

```sql
SHOW INDEX FROM vec_table;

```

返回结果如下：

```shell
Empty set

```

## 相关文档

- 关于 IVF 系列索引的内存估算与实际占用查询，请参见[索引内存管理](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004827711)
 - 关于 IVF 系列索引的监控与维护，请参见[索引监控与维护](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004827716)
 - 关于 IVF 系列索引的性能优化，请参见[索引性能优化](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004827717)

 上一篇 下一篇 ![有帮助](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) 咨询热线
