协会地址:上海市长宁区古北路620号图书馆楼309-313室
大型向量搜索基准测试:10个数据库对比
原文链接:
https://mariadb.org/big-vector-search-benchmark-10-databases-comparison/

我此前曾对 MariaDB Vector 进行过基准测试,但那是相当久以前的事了。用户不断询问 Milvus 的情况。新的 pgvector 替代方案也日益流行。而我只是想看看 MariaDB 是否有所改进。本次基准测试轮次包含了更多数据库、更大的数据集,并且剔除了那些只会增加噪音、在 2026 年的今天并无实际帮助的无关数据集。
数据集
如今是 AI 时代。向量搜索用于处理由 LLM 生成的嵌入(embeddings)。大多数 ann-benchmarks 数据集 都是前 AI 时代的产物,它们使用图像变换和滤镜等方式来构建向量。虽然这些数据集在某些场景下有用,但它们并非 MariaDB Vector 的主要用例,提供这些结果反而会误导用户,偏离用户真正关心的重点。因此,本次基准测试仅使用一个数据集——dbpedia-openai-1000k,即由 OpenAI 将 DBpedia 中的一百万篇文本转换为 1536 维嵌入(embeddings)的数据集。这是一个大型数据集,比我之前使用的任何数据集都要大一倍以上,我很想知道 MariaDB 能否应对。
数据库
本次基准测试选择了以下数据库:
- MariaDB 12.3
- MariaDB 11.8
- pgvector master 分支(截至 2026-02-08)
- pgvecto.rs 标签 pg16-v0.3.0-alpha.1
- pgvectorscale master 分支(截至 2026-02-08)
- RediSearch 版本 6.2.13
- Weaviate 版本 1.19.0-beta.1,weaviate-client 3.16.0
- OpenSearch 版本 2.6.0
- Qdrant 版本 1.5.1
- Milvus 版本 2.4.1 index_type=”HNSW”
除 MariaDB 外,这些版本均为 ann-benchmarks 所使用的版本,有些非常新,另一些则遗憾地并非最新。
设置
本次基准测试由 我 fork 的 ann-benchmarks 运行,该版本增加了对 MariaDB 的支持。结果发现,在默认设置下,ann-benchmarks 无法处理如此大的数据集,我不得不增加多个超时时间,并为 OpenSearch 调整 JVM 选项(从 -Xmx3G 改为 -Xmx32G)。此外,我还不得不修补 ann-benchmarks 中对 Milvus 的支持,以防止作弊行为,该 bug 已 报告给 ann-benchmarks。
硬件方面,测试运行在 Intel(R) Xeon(R) CPU E5-2660 v4 @ 2.00GHz 上。该 CPU 仅支持 AVX2,不支持 AVX512,因此在更新的 CPU 上,大多数(如果不是全部)参与测试的数据库都会更快。
结果
闲话少叙,以下是结果,聚焦于实际重要的召回率范围 90%-98%:


观察
在 Recall-QPS 图表中,结果清晰地分为三组:MariaDB 和 RediSearch 在 94% 召回率下提供 850-1000 QPS;Weaviate/pgvectorscale/pgvecto.rs 提供 470-570 QPS;OpenSearch/Qdrant/Milvus 在 94% 召回率下提供 90-150 QPS。pgvector 以 250 QPS 位于第二组和第三组之间。
MariaDB 12.3 明显快于 11.8,并且在召回率 > 95% 时具有最高的 QPS,而 RediSearch 在较低召回率下略快。
Recall-Build 图表也显示了三个明显不同的组:两个 MariaDB 版本和 Qdrant 在 15 分钟内构建索引,紧随其后的是 pgvectorscale;Milvus 和 Weaviate 需要略长于一个小时;而 RediSearch、pgvector、pgvecto.rs 和 OpenSearch 对于相同的数据集和相同的召回率水平需要 2.5-3 小时。所有数据库在这些构建时间下都提供了非常高的召回率,而明确针对较低的召回率并不会带来任何显著的加速。
结论
有些数据库在创建索引时更快,有些则在搜索时更快。RediSearch 的搜索速度最快,但索引构建时间最慢。Qdrant 的搜索速度最慢,但索引构建时间最快。Weaviate 在两者上都表现平均,是一个合理的折衷。这可以理解,没有人能在所有方面都表现出色。除非是 MariaDB,它打破了这一模式,实际上在所有方面都表现出色,同时提供了最快的索引搜索和最快的索引构建时间!
对于 PostgreSQL 用户来说,pgvectorscale 现在是首选选项,至少根据这个基准测试来看是这样。它的索引构建时间相当快,远快于 pgvector,并且搜索速度也相当快。而 pgvecto.rs 的搜索速度与 pgvectorscale 一样快,但构建索引所需的时间是其 7 倍(对于 dbpedia-openai-1000k 数据集)。







