experimental_ivf_index

experimental_ivf_index 系统变量控制是否启用 IVF-FLAT(Inverted File with Flat encoding)向量索引插件。设为 0(默认值)时,CREATE INDEX ... USING ivfflat 语句将 被拒绝。在创建或重建 IVF-FLAT 索引之前将其设为 1,以对向量列执行近似最近邻(ANN) 搜索。这是由会话级别标志控制的实验性功能。

experimental_ivf_index 系统变量控制 MatrixOne 中 IVF-FLAT 向量索引算法的访问权限。 IVF-FLAT 使用 k-means 将向量空间划分为簇,在查询时仅搜索最近的几个簇,相比 HNSW 提供 了一种更节省内存的替代方案。由于这是实验性功能,该变量默认值为 0,必须显式启用才能 使用。

语法

SET GLOBAL experimental_ivf_index = 0; SET SESSION experimental_ivf_index = 1;

查询当前值:

SHOW VARIABLES LIKE ‘experimental_ivf_index’; SELECT @@experimental_ivf_index;

参数说明

属性

变量类型

bool

作用域

Both

是否动态

默认值

0

可选值

01

示例

DROP DATABASE IF EXISTS ivf_demo;
CREATE DATABASE ivf_demo;
USE ivf_demo;

SET experimental_ivf_index = 1;

CREATE TABLE f(a BIGINT PRIMARY KEY, v VECF32(3));
INSERT INTO f VALUES (1, '[1,1,1]'), (2, '[2,2,2]'), (3, '[3,3,3]'), (4, '[8,8,8]');

CREATE INDEX ix USING ivfflat ON f(v) LISTS = 2 OP_TYPE 'vector_l2_ops' KMEANS_TRAIN_PERCENT 5 KMEANS_MAX_ITERATION 20;

SELECT a FROM f ORDER BY L2_DISTANCE(v, '[1,1,1]') ASC LIMIT 2;

SET experimental_ivf_index = 0;

DROP TABLE f;
DROP DATABASE ivf_demo;

限制

  • experimental_ivf_index 默认为 0。在此变量为 0 时尝试 CREATE INDEX ... USING ivfflat 会导致操作失败。

  • IVF-FLAT 是纯 CPU 算法,不需要 GPU 硬件。

  • IVF-FLAT 支持以下构建参数:listskmeans_train_percentkmeans_max_iteration。这些参数可以在 CREATE INDEXALTER TABLE ... ALTER REINDEX 语句中指定。

  • 这是实验性功能。其行为、性能特性和 API 在未来的版本中可能会发生变化。