IVF 系列索引
本文档介绍了 seekdb 的稠密索引 IVF 系列索引的创建、搜索、删除语法说明及示例。
索引语法及说明
创建
IVF 系列索引包含 IVF 和 IVF_PQ 两种索引,其创建支持在建表时创建和后建两种方式。创建时需要注意:
- 创建向量索引必须带有
VECTOR关键字。 - 后建索引的参数和说明与建表时创建索引一致。
- 如果数据量较大,建议先写完数据,再创建索引,以获得最佳搜索性能。
- IVF/IVF_PQ 索引均建议在写入数据后再创建索引,并在写入较多增量数据后进行索引重建。每个索引具体的创建说明见下文具体示例。
- 创建 IVF 索引时,索引名长度暂不支持超过 33 个字符,否则可能因为索引辅助表名长度超过
index_name限制导致异常。未来版本会支持更长的索引名。
建表时创建
建表时创建索引语法:
CREATE TABLE table_name (
column_name1 data_type1,
column_name2 VECTOR(dim),
...,
VECTOR INDEX index_name (column_name2) WITH (param1=value1, param2=value2, ...)
);
后建索引
后建索引语法:
-- 后建索引支持设置并行度,以提升索引构建性能,并行度最大设置不超过 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 索引时可指定。 | 该值越大,索引构建越慢,搜索准确率越高,同时搜索性能会受到影响。 |