ALTER REINDEX¶
ALTER TABLE … ALTER REINDEX 用于对向量表中的数据重新进行分区。
语法说明¶
ALTER TABLE ... ALTER REINDEX 用于对向量表中的数据重新进行分区。
当向量表内的数据记录大幅增长时,原有的聚类中心集合可能不再适用。为此,我们必须对数据重新进行索引处理,旨在识别出新的聚类中心,并据此重新划分数据集。
备注
在重构索引期间,无法对该表进行数据插入操作。
LISTS 的理想值为:
如果总行数<1000000:lists=总行数/1000
如果总行数>1000000:lists=sqrt(总行数)
语法结构¶
> ALTER TABLE table_name ALTER REINDEX index_name algorithm [option_list]
table_name:包含索引的表名。index_name:要重建的索引名称。algorithm:重建时使用的索引算法。必须与索引的现有算法类型匹配。支持的值:ivfflat、hnsw。option_list:算法特定的构建选项。
每种算法在重建时接受其支持的构建选项(将其合并到持久化的算法参数中,可通过 SHOW CREATE TABLE 查看),并拒绝其不支持的选项并报错。
IVF-FLAT 重建选项¶
对于 IVF-FLAT 索引,ALTER REINDEX 支持以下选项:
选项 |
描述 |
|---|---|
|
聚类分区数。必须大于 0。 |
|
用于 k 均值训练的数据百分比。 |
|
k 均值聚类的最大迭代次数。 |
IVF-FLAT 不支持的选项(如 m、ef_construction、ef_search、graph_degree)会被拒绝并报错。
HNSW 重建选项¶
对于 HNSW 索引,ALTER REINDEX 支持以下选项:
选项 |
描述 |
|---|---|
|
每个节点的最大邻居连接数。控制图的密度。 |
|
构建索引时的扩展因子。 |
|
查询时的扩展因子。 |
|
HNSW 图的最大索引容量。 |
HNSW 不支持的选项(如 lists、kmeans_train_percent、kmeans_max_iteration)会被拒绝并报错。
示例¶
IVF-FLAT 重建¶
DROP DATABASE IF EXISTS dbreindex;
CREATE DATABASE dbreindex;
USE dbreindex;
CREATE TABLE t1(n1 INT, n2 VECF32(4));
INSERT INTO t1 VALUES(1,"[1,2,3,4]"),(2,"[5,6,7,8]"),(3,"[9,10,11,12]");
CREATE INDEX idx_t1 USING ivfflat ON t1(n2) LISTS=2 OP_TYPE "vector_l2_ops";
ALTER TABLE t1 ALTER REINDEX idx_t1 ivfflat LISTS=4 kmeans_train_percent=80 kmeans_max_iteration=50;
DROP DATABASE dbreindex;
HNSW 重建¶
DROP DATABASE IF EXISTS dbreindex;
CREATE DATABASE dbreindex;
USE dbreindex;
CREATE TABLE hnsw_t(a BIGINT PRIMARY KEY, b VECF32(4));
INSERT INTO hnsw_t VALUES(1,"[1,2,3,4]"),(2,"[5,6,7,8]"),(3,"[9,10,11,12]");
CREATE INDEX hidx USING hnsw ON hnsw_t(b) OP_TYPE "vector_l2_ops" M=48 EF_CONSTRUCTION=64 EF_SEARCH=64;
ALTER TABLE hnsw_t ALTER REINDEX hidx hnsw M=32 EF_CONSTRUCTION=128 EF_SEARCH=100 MAX_INDEX_CAPACITY=100000;
DROP DATABASE dbreindex;