---
title: "使用 SQL 快速进行向量搜索 - OceanBase 数据库 V4.3.4 | OceanBase 文档中心"
description: 使用 SQL 快速进行向量搜索 OceanBase 支持使用 SQL 语言进行向量搜索，本文介绍了快速上手方法。 前提条件 请确保你已 部署了 OceanBase 集群 并创建了 MySQL 租户。 已连接到 OceanBase 数据库。详情请参考 连接方式概述 。 快速上手 启用向量搜索功能 在使用向量索引前，需要…
---
切换语言

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

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

# 使用 SQL 快速进行向量搜索

更新时间：2025-11-14 16:01:01

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.3.4/zh-CN/640.ob-vector-search/120.ob-vector-search-quick-start/100.ob-vector-search-sql-quick-start.md)  

OceanBase 支持使用 SQL 语言进行向量搜索，本文介绍了快速上手方法。

## 前提条件

- 请确保你已[部署了 OceanBase 集群](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001573563)并创建了 MySQL 租户。
 - 已连接到 OceanBase 数据库。详情请参考[连接方式概述](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001574087)。

## 快速上手

### 启用向量搜索功能

在使用向量索引前，需要依据租户下的索引数据估计内存占用并进行配置，内存计算方式请参见 [ob_vector_memory_limit_percentage](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001576196)。以下命令表示将向量索引可用内存配置为租户内存的 30%：

```sql
ALTER SYSTEM SET ob_vector_memory_limit_percentage = 30;

```

`ob_vector_memory_limit_percentage` 的默认值为 `0`，表示不为向量索引分配内存，创建索引会报错。

### 创建向量列和索引

创建表时，可以使用 `VECTOR(dim)` 数据类型声明指定列为向量列及其维度。向量索引需要创建在向量列上，且至少需要提供 `type` 和 `distance` 两个参数。

示例中创建向量列 `embedding`，向量数据维度为 `3`，并在 `embedding` 列上创建 HNSW 索引，指定距离算法为 L2。

```sql
CREATE TABLE t1(
    id INT PRIMARY KEY,
    doc VARCHAR(200),
    embedding VECTOR(3),
    VECTOR INDEX idx1(embedding) WITH (distance=L2, type=hnsw)
    );

```

在数据量较大的情况下建议先导入完数据再创建向量索引，后建索引详情请参见[创建向量索引](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001579721)。

### 写入向量数据

为了模拟在向量搜索的场景，需要先构造一些向量数据，每行数据都包括对数据的描述和对应的向量。示例中假设 `'苹果'` 对应的向量为 `'[1.2,0.7,1.1]'`， `'胡萝卜'` 对应的向量为 `'[5.3,4.8,5.4]'` 等。

```sql
INSERT INTO t1
  VALUES (1, '苹果', '[1.2,0.7,1.1]'),
         (2, '香蕉', '[0.6,1.2,0.8]'),
         (3, '橙子','[1.1,1.1,0.9]'),
         (4, '胡萝卜', '[5.3,4.8,5.4]'),
         (5, '菠菜', '[4.9,5.3,4.8]'),
         (6, '西红柿','[5.2,4.9,5.1]');

```

为了方便展示，本例简化了向量的维度，仅使用了 3 维向量，且向量是人工生成的。在实际应用中，需要使用嵌入模型对真实的文本进行生成，维度会达到数百或上千维。

可以通过查询表中的数据查看是否写入成功。

```sql
SELECT * FROM t1;

```

预期返回结果如下：

```shell
+----+-----------+---------------+
| id | doc       | embedding     |
+----+-----------+---------------+
|  1 | 苹果      | [1.2,0.7,1.1] |
|  2 | 香蕉      | [0.6,1.2,0.8] |
|  3 | 橙子      | [1.1,1.1,0.9] |
|  4 | 胡萝卜    | [5.3,4.8,5.4] |
|  5 | 菠菜      | [4.9,5.3,4.8] |
|  6 | 西红柿    | [5.2,4.9,5.1] |
+----+-----------+---------------+
6 rows in set

```

### 执行向量搜索

进行向量搜索需要提供向量作为搜索条件。假设我们需要找到所有 `'水果'`，其对应的向量为 `[0.9, 1.0, 0.9]`，则对应 SQL 为：

```sql
SELECT id, doc FROM t1
ORDER BY l2_distance(embedding, '[0.9, 1.0, 0.9]')
APPROXIMATE LIMIT 3;

```

预期返回结果如下：

```shell
+----+--------+
| id | doc    |
+----+--------+
|  3 | 橙子   |
|  2 | 香蕉   |
|  1 | 苹果   |
+----+--------+
3 rows in set

```

## 相关文档

- 向量数据详细说明请参见 [向量数据](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001579719)。
 - 建表后创建向量索引、删除索引方法请参见 [创建向量索引](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001579721)。

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