---
title: "Optimized Hint 类型下的 Vector Index Hint - OceanBase 数据库 V4.6.0 | OceanBase 文档中心"
description: Optimized Hint 类型下的 Vector Index Hint 在 MySQL 模式的 OceanBase 数据库中，使用 Vector Index Hint 可以控制查询时选择具体向量索引及设置前后过滤条件。 Hint 名称 解释 VECTOR_INDEX 指定查询时使用的向量索引，以及前后过滤条件。 …
---
切换语言

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

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

# Optimized Hint 类型下的 Vector Index Hint

更新时间：2026-07-15 15:16:39

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.6.0/zh-CN/700.reference/500.sql-reference/100.sql-syntax/200.common-tenant-of-mysql-mode/100.basic-elements-of-mysql-mode/600.annotation-of-mysql-mode/400.hint-of-mysql-mode/200.hint-list-of-mysql-mode/200.optimizer-hint-of-mysql-mode/900.hints-related-to-vector-index-hint-of-mysql-mode.md)  

在 MySQL 模式的 OceanBase 数据库中，使用 Vector Index Hint 可以控制查询时选择具体向量索引及设置前后过滤条件。

| Hint 名称 | 解释 |
| --- | --- |
| `VECTOR_INDEX` | 指定查询时使用的向量索引，以及前后过滤条件。 |

## 语法

```sql
/*+ VECTOR_INDEX (table_name [, index_name] [, {'pre_filter' | 'post_filter'}]) */

```

参数说明如下：

- `table_name`：主表的名称。
 - `index_name`：指定使用的向量索引的名称，可以不指定，则由优化器自行选择索引。
 - 可指定的过滤条件，如果不指定则由优化器自行选择过滤方式：
     - `pre_filter`：用于在向量索引查询之前过滤。
     - `post_filter`：用于在向量索引查询之后过滤。

## 示例

1. 创建一个测试表 `t`，并插入测试数据：

   ```sql
   CREATE TABLE t(c1 INT, c2 INT, c3 INT);
   INSERT INTO t VALUES (1, 2, 3), (4, 5, 6), (7, 8, 9);

   ```
 2. 创建一个向量索引 `vec_idx1`

   ```sql
   CREATE VECTOR INDEX vec_idx1 ON t(c2) WITH (distance=l2, type=hnsw);

   ```
 3. 使用 `VECTOR_INDEX` Hint 指定查询时使用向量索引 `vec_idx1` 及后置过滤条件

   ```sql
   EXPLAIN SELECT /*+VECTOR_INDEX(t vec_idx1 post_filter)*/ * FROM t WHERE c1 > 1 AND c2 > 2 ORDER BY l2_distance(cv, '[1,2,3]') APPROX LIMIT 1;

   ```

   返回结果如下，其中 `VECTOR INDEX ADAPTIVE SCAN (POST-ITERATIVE-FILTER)` 表示使用向量索引 `vec_idx1` 进行查询，且使用了后置过滤条件：

   ```sql
   Query Plan
   =========================================================================================
   |ID|OPERATOR                                          |NAME       |EST.ROWS|EST.TIME(us)|
   -----------------------------------------------------------------------------------------
   |0 |VECTOR INDEX ADAPTIVE SCAN (POST-ITERATIVE-FILTER)|t(vec_idx1)|2       |15          |
   =========================================================================================
   Outputs & filters:
   -------------------------------------
   0 - output([t.c1], [t.c2], [t.cv]), filter([t.c1 > 1], [t.c2 > 2]), rowset=16
       access([t.__pk_increment], [t.cv], [t.c1], [t.c2]), partitions(p0)
       is_index_back=true, is_global_index=false, filter_before_indexback[true,false],
       range_key([t.c1], [t.__pk_increment]), range(1,MAX ; MAX,MAX)

   ```

## 与 INDEX Hint 的配合使用

本节简要梳理向量索引 Hint（VECTOR_INDEX）与普通索引 Hint（INDEX）配合使用时的行为规则，优化实际 Hint 应用的说明：

- 仅指定 INDEX Hint（普通索引）：优先采用 pre filter（前过滤）。
 - 仅指定 INDEX Hint（向量索引）：优先采用 post filter（后过滤），且命中指定的向量索引。
 - 仅指定 VECTOR_INDEX Hint：由优化器根据 Hint 配置选择具体索引和过滤方式。
 - 当同时指定 INDEX Hint 和 VECTOR_INDEX Hint 时，系统优先采用 VECTOR_INDEX Hint。若存在多个 VECTOR_INDEX Hint，则从中随机选择一个生效。

下文我们通过示例来详细说明向量索引 Hint（VECTOR_INDEX）与普通索引 Hint（INDEX）配合使用时的行为规则。

**示例表结构如下：**

```sql
CREATE TABLE t(c1 INT, c2 INT, cv VECTOR(3));
CREATE INDEX idx1 ON t(c1);
CREATE INDEX idx2 ON t(c2);
CREATE VECTOR INDEX vec_idx1 ON t(cv) WITH (type=hnsw, distance=l2);
CREATE VECTOR INDEX vec_idx2 ON t(cv) WITH (type=hnsw_bq, distance=l2);
CREATE VECTOR INDEX vec_idx3 ON t(cv) WITH (type=hnsw, distance=cosine);

```

这里介绍几种常见的使用场景：

1. 仅指定 INDEX Hint（普通索引）

   ```sql
   SELECT /*+INDEX(t idx1)*/ * FROM t
   ORDER BY l2_distance(cv, @vec) WHERE c1 < 1 AND c2 < 1 APPROX LIMIT 6;

   ```

   本例优先采用 pre filter（前过滤）。
 2. 仅指定 INDEX Hint（向量索引）

   ```sql
   SELECT /*+INDEX(t vec_idx2)*/ * FROM t
   ORDER BY l2_distance(cv, @vec) WHERE c1 < 1 AND c2 < 1 APPROX LIMIT 6;

   ```

   本例优先采用 post filter（后过滤），且命中指定的向量索引 `vec_idx2`。
 3. 仅指定 VECTOR_INDEX Hint（pre_filter）

   ```sql
   SELECT /*+VECTOR_INDEX(t vec_idx1 pre_filter)*/ * FROM t
   ORDER BY l2_distance(cv, @vec) WHERE c1 < 1 AND c2 < 1 APPROX LIMIT 6;

   ```

   上例指定使用向量索引 `vec_idx1` 的前过滤。若未额外指定前过滤的具体索引，则优化器会从相关列的可用索引中自动选择（如 `c1`、`c2` 上各有索引，则皆可能用于前过滤）。
 4. 同时指定 INDEX Hint（普通索引）和 VECTOR_INDEX Hint（pre_filter）

   ```sql
   SELECT /*+INDEX(t idx1) VECTOR_INDEX(t vec_idx1 pre_filter)*/ * FROM t
   ORDER BY l2_distance(cv, @vec) WHERE c1 < 1 AND c2 < 1 APPROX LIMIT 6;

   ```

   本例优先采用 VECTOR_INDEX 指向的前过滤，并且指定了使用向量索引 `vec_idx1` 和普通索引 `idx1` 负责前过滤。
 5. 同时指定 INDEX Hint（普通索引）和 VECTOR_INDEX Hint（post_filter）

   ```sql
   SELECT /*+INDEX(t idx1) VECTOR_INDEX(t vec_idx1 post_filter)*/ * FROM t
   ORDER BY l2_distance(cv, @vec) WHERE c1 < 1 AND c2 < 1 APPROX LIMIT 6;

   ```

   本例将优先采用向量索引 `vec_idx1` 的后过滤。需要注意，当前版本中后过滤不支持与普通索引联合使用，因此即使同时指定了 `index(t idx1)`，该 Hint 也不会起作用，最终仅应用 VECTOR_INDEX Hint 所指定的向量索引 `vec_idx1` 的后过滤。
 6. 同时指定 INDEX Hint（向量索引）和 VECTOR_INDEX Hint（pre_filter）

   ```sql
   SELECT /*+INDEX(t vec_idx2) VECTOR_INDEX(t vec_idx1 pre_filter)*/ * FROM t
   ORDER BY l2_distance(cv, @vec) WHERE c1 < 1 AND c2 < 1 APPROX LIMIT 6;

   ```

   本例优先依照 VECTOR_INDEX Hint 指定走 `vec_idx1` 的前过滤，INDEX Hint（向量索引）`index(t vec_idx2)` 不生效。
 7. VECTOR_INDEX Hint 指定的向量索引距离算法与查询算法不匹配

   ```sql
   SELECT /*+INDEX(t vec_idx2) VECTOR_INDEX(t vec_idx3 pre_filter)*/ * FROM t
   ORDER BY l2_distance(cv, @vec) WHERE c1 < 1 AND c2 < 1 APPROX LIMIT 6;

   ```

   本例 VECTOR_INDEX Hint 失效，若还有其它 INDEX Hint，则按照上文说明的行为规则选择。从上文示例表结构中可以看到 `vec_idx3` 距离算法为 cosine，而查询为 l2，此 Hint 失效，则按 `index(t vec_idx2)` 后过滤规则生效。
 8. 同时指定多个 VECTOR_INDEX Hint 且距离算法一致

   ```sql
   SELECT /*+VECTOR_INDEX(t vec_idx1 pre_filter) VECTOR_INDEX(t vec_idx2 post_filter)*/ * FROM t
   ORDER BY l2_distance(cv, @vec) WHERE c1 < 1 AND c2 < 1 APPROX LIMIT 6;

   ```

   若距离算法均一致，优化器会从中择一生效，但不保证顺序或指定哪一个。

通过以上规则，可灵活组合 VECTOR_INDEX 与 INDEX Hint 实现向量索引和普通索引的最优协同。

## 相关文档

- [INDEX Hint](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005686951)

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