使用限制

前提条件

不支持在 USTORE、CSTORE 存储引擎中使用向量检索。

向量字段和向量索引维度限制

  • 不允许建立超过 16384 个维度的向量字段。
  • Graph_Index、DiskANN、HybridANN 索引支持在不超过 16384 维度的字段上建立。
  • 其他向量索引仅支持在不超过 2000 维度的字段上建立。

不支持的向量运算符

暂不支持的运算符含义影响
||将两个向量连接成一个新的更长的向量。尝试使用此运算符时将导致错误。
*两个向量逐元素相乘。尝试使用此运算符时将导致错误。
<+>计算两个向量之间的曼哈顿距离,即各维度差的绝对值之和。尝试使用此运算符时将导致错误。

不支持的向量比较符

暂不支持的比较符含义影响
=用于判断两个向量的所有对应元素是否完全相等。尝试使用此比较符将导致报错。
>用于判断一个向量是否大于另一个向量。尝试使用此比较符将导致报错。
<用于判断一个向量是否小于另一个向量。尝试使用此比较符将导致报错。
>=用于判断一个向量是否大于等于另一个向量。尝试使用此比较符将导致报错。
<=用于判断一个向量是否小于等于另一个向量。尝试使用此比较符将导致报错。
<>用于判断两个向量是否不同。尝试使用此比较符将导致报错。
!=用于判断两个向量是否不同。尝试使用此比较符将导致报错。
BETWEEN判断向量是否在指定范围内。尝试使用此比较符将导致报错。

不支持的聚合函数

除count()之外, 向量字段不支持其他聚合函数。

以下用法报错:

create table test1(c1 int,c2 floatvector(3));
select avg(c2) from test1;
select sum(c2) from test1;

向量字段不支持 union 和 col in(...) 语法

向量数据暂不支持 = 操作符,故暂不支持上述用法。

向量字段不能用在 GROUP BY/ORDER BY 子句中

create table test1(c1 int,c2 floatvector(3));
--以下 SELECT 语句报错:
select c2 from test group by c2 limit 3;
select c2 from test order by c2;

向量字段不能作为主键或唯一性约束

以下用法报错:

create table test1(c1 int unique,c2 floatvector primary key);
create table test1(c1 int,c2 floatvector unique);

建立索引删除/更新大量数据后应先 VACUUM 重建索引

原因

当删除或者更新数据后,改动之前的数据并不会立即从存储中移除,而是作为“死元组”存在于表中。索引仍然可能指向这些死元组,导致查询统计结果时时误将这些无效数据包含在内,虽然返回客户端之前会过滤掉,用户不会直接看到已经删除的数据,但是当候补元组数量不足时,可能造成返回数据少于预期。

HNSW 索引由参数 hnsw_ef_search 决定候补元组数,hnsw_ef_search 越大候补元组数越多;ivfflat 及 ivf-pq 索引由参数 ivf_nlist 和 ivf_probes 决定候补元组数,ivf_nlist 越小、ivf_probes 越大,候补元组数越多。

建议

当更新/删除数据占总元组数达到 60% 或更高,删除索引,再 VACUUM,重建索引。