主流信创数据库对向量功能的支持对比
- 版本支持对比
- 向量索引支持对比
- 距离函数支持对比
- 使用限制对比
- OceanBase向量数据库
- GaussDB向量数据库
- TiDB向量数据库
- VastBase向量数据库
⭐️ 本文章引用数据截止于2025年5月31日。
版本支持对比
数据库产品 | 支持向量功能的版本 |
---|---|
OceanBase | OceanBase数据库最早开始支持向量的版本是2024年3月发布的v4.3.0 版本。最新的支持版本是v4.3.5 BP2 。 |
GaussDB | GaussDB目前仅能确认2024年4月发布的v2.0-8.102 主备版支持向量功能。 |
TiDB | TiDB从2024年11月发布的v8.4.0 开始支持向量(实验特性)。最新的支持版本是v8.5.1 。 |
VastBase | 海量数据库从2025年1月发布的v3.0 Build 8 开始支持向量特性。最新的支持版本是v3.0 Build 8 (Patch No.1) 。 |
📖 目前国内主流信创数据库基本都是从2024年开始支持向量搜索功能的。而且对很多数据库产品来说目前都还是实验室特性,官方推荐的生产环境基线版本并不支持。例如OceanBase目前的基线版本是v4.2版本,而支持向量特性的最低版本是v4.3。
向量索引支持对比
数据库产品 | 支持的向量索引类型 |
---|---|
OceanBase | OceanBase最新版本(v4.3.5)支持HNSW索引、HNSW_SQ索引、HNSW_BQ索引、IVF索引。其中IVF索引为实验室特性。 |
GaussDB | GaussDB的v2.0-8.102 主备版支持IVF-Flat索引、DiskANN索引。 |
TiDB | TiDB最新版本(v8.5)仅支持HNSW索引。 |
VastBase | VastBase最新版本(v3.0.8)支持HNSW索引、IVF-Flat索引、IVF-PQ索引、DiskANN索引。 |
📖 目前国内主流信创数据库对向量索引类型支持最全面的是VastBase,支持种类最少的数据库产品是TiDB。几乎所有向量数据库都支持HNSW索引。
距离函数支持对比
数据库产品 | 支持的向量距离函数 |
---|---|
OceanBase | L2_distance(欧几里得距离)、L1_distance(曼哈顿距离)、Cosine_distance(余弦相似度)、Inner_product(点积)、Negative_inner_product(负内积)、Vector_distance |
GaussDB | L2_distance(欧几里得距离)、Cosine_distance(余弦相似度)、vector_spherical_distance(球面距离)、Inner_product(点积)、Negative_inner_product(负内积) |
TiDB | L2_distance(欧几里得距离)、L1_distance(曼哈顿距离)、Cosine_distance(余弦相似度)、Negative_inner_product(负内积) |
VastBase | L2_distance(欧几里得距离)、Cosine_distance(余弦相似度)、vector_spherical_distance(球面距离)、Inner_product(点积)、Negative_inner_product(负内积) |
📖 目前国内主流信创数据库基本都支持计算欧几里得距离、余弦相似度、内积和负内积。个别产品还支持计算曼哈顿距离和球面距离。
使用限制对比
OceanBase向量数据库
- OceanBase向量数据库目前仅MySQL租户模式支持向量检索,Oracle租户模式暂不支持。
- OceanBase向量数据库最高支持
16000
维的Float类型的稠密向量数据存储,同时也支持稀疏向量数据存储。 - OceanBase向量数据库中对超过
4096
维的向量建索引时,需要对数据做维度压缩,压缩到4096维以内之后再建索引。 - OceanBase向量数据库支持使用SQL和Python SDK两种协议方式进行向量检索。
- OceanBase向量数据库支持与OpenAI API、通义千问API、Langchain、LlamaIndex等主流AI框架集成。
GaussDB向量数据库
- 当前版本只支持单机部署,集中式部署;不支持分布式和小型化部署。
- 创建表维度不能超过
1024
,即维度范围在[1, 1024]
。 - 不支持创建分布表全局索引(gpi)。
- 向量索引不支持创建Unique索引。
- 向量索引不支持聚簇排序。
- 向量索引不支持创建多列索引。
- floatvector和boolvector不支持作为分区键。
- floatvector和boolvector不支持创建主键。
- floatvector和boolvector不支持创建Unique键。
- floatvector和boolvector不支持为NULL值。
- dblink暂不支持vector类型,因此也不支持向量索引创建。
- 向量索引不支持备机可读。
- 向量索引不支持增量构建,不支持在线创建。
- Floatvector和boolvector类型不支持创建除向量索引以外的索引(例如btree和ubtree)。
- 当前向量索引只支持距离TopK语句(按照距离升序排序),其他距离操作不进行索引。
- 索引构建时间较长,内存规格低的场景需要预留构建时间。
- 图索引空间膨胀率较大,磁盘规格低的场景无法创建成功。
- 向量检索是资源密集型操作,如果同时进行多个业务,会影响性能。
- 不支持unlogged、temp表构建向量索引。
- 使用ustore索引,相比于astore索引空间增长10%以内,检索时延增加5%。
- 索引依赖Vacuum进行空间回收,两次Vacuum之间如果存在频繁增删,向量检索会出现效率下降、空间膨胀的问题。
- 索引类型不支持统计信息,选择率估计使用默认值,有代价估计,但是目前只支持索引和顺序扫描进行选择。
TiDB向量数据库
- 集群需要提前部署TiFlash节点。
- 向量搜索索引不能作为主键或者唯一索引。
- 向量搜索索引只能基于单一的向量列创建,不能与其他列(如整数列或字符串列)组合形成复合索引。
- 创建和使用搜索向量索引时需要指定距离函数。目前只支持余弦距离函数
VEC_COSINE_DISTANCE()
和L2距离函数VEC_L2_DISTANCE()
。 - 不支持在同一列上创建多个使用了相同距离函数的向量搜索索引。
- 不支持直接删除具有向量搜索索引的列。可以通过先删除列上的向量搜索索引,再删除列的方式完成删除。
- 不支持修改带有向量索引的列的类型。
- 不支持将向量搜索索引设置为不可见。
- 不支持在开启了静态加密的TiFlash节点上构建向量搜索索引。
VastBase向量数据库
-
不允许建立超过
16000
个维度的向量字段。DiskANN索引支持在不超过2048
维度的字段上建立。其他向量索引仅支持在不超过2000
维度的字段上建立。 -
不支持以下向量运算符:
||
(拼接两个向量)*
(两个向量逐元素相乘)<+>
(计算两个向量之间的曼哈顿距离)
- 不支持以下向量比较符:
=
(用于判断两个向量的所有对应元素是否完全相等)>
(用于判断一个向量是否大于另一个向量)<
(用于判断一个向量是否小于另一个向量)>=
(用于判断一个向量是否大于等于另一个向量)<=
(用于判断一个向量是否小于等于另一个向量)<>
(用于判断两个向量是否不同)!=
(用于判断两个向量是否不同)BETWEEN
(判断向量是否在指定范围内)
- 除
count()
之外, 向量字段不支持其他聚合函数。 - 向量字段不支持
union
和col in(...)
语法。 - 向量字段不能用在
GROUP BY/ORDER BY
子句中。 - 向量字段不能作为主键或唯一性约束。
- 建立索引删除/更新大量数据后应先vaccum再重建索引。
- 匿名块绑定变量仅支持返回
text
类型,不支持返回驱动定义的PGvector
类型。 - IVF-PQ子查询受外层LIMIT子句影响,可能导致查询召回率下降。
- 索引返回元组数可能少于走全表扫描的数据或者LIMIT子句指定的数量。
- 向量标量混合查询,走索引查询返回的结果可能少于走全表扫描的结果。
Referecnes
【1】https://doc.hcs.huawei.com/zh-cn/gaussdb/doc/download/pdf/gaussdb-vector-cent.pdf
【2】https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002012936
【3】https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002046118
【4】https://docs.vastdata.com.cn/zh_CN/VastbaseG100/V3.0.8/1/5e3842f9085a4fd5b491f3203651ff7d
【5】https://docs.pingcap.com/zh/tidb/stable/release-8.4.0/
【6】https://docs.pingcap.com/zh/tidb/stable/vector-search-overview/
【7】https://docs.pingcap.com/zh/tidb/stable/vector-search-index/