向量数据库索引结构入门:从 Flat 到 HNSW

举报
yd_216142390 发表于 2026/11/04 13:19:21 2026/11/04
【摘要】 从暴力检索到 HNSW,梳理 Flat、IVF、PQ 与图索引的取舍,并给出向量检索的工程选型思路。

为什么需要向量索引

在检索增强生成(RAG)系统中,我们经常要在数百万条向量里找出与查询最相似的几十条。如果每次查询都把所有向量与查询向量算一遍距离,准确率当然最高,但计算量会随数据规模线性增长。以一百万条 768 维向量为例,一次暴力检索大约要做七亿次浮点乘加,延迟很难稳定在几十毫秒以内。向量索引的核心任务,就是用少量精度或召回率的代价,换取数量级的速度提升。

Flat:最简单的基线

Flat 索引不建任何结构,查询时遍历全部向量,通常配合 SIMD 指令和 GPU 做批量距离计算。它的召回率是百分之百,适合数据量小、或者需要离线评估其他索引效果的场景。工程上不要因为它简单就忽略它:Flat 往往是压测的基线,也是判断其他索引是否真的带来收益的参照物。

IVF:先聚类再搜索

IVF(Inverted File)先用 K-Means 把向量聚成若干簇,查询时只扫描距离查询最近的若干个簇。参数 nlist 决定簇数量,nprobe 决定扫描多少簇。nprobe 越大,召回率越高,延迟也越高。IVF 的难点在于数据分布变化后簇中心会漂移,需要定期重训练,否则靠近边界的查询容易漏掉邻居。

PQ:用编码换内存

PQ(Product Quantization)把高维向量切成若干段,每段用一个小码本编码成字节。查询时用查表代替乘法,内存占用可以降低一个数量级。它常与 IVF 组合成 IVF-PQ:先用粗聚类缩小范围,再用压缩编码快速排序。代价是距离估算存在误差,通常还需要用原始向量对候选集做重排,才能把召回率补回来。

HNSW:图索引的工程折中

HNSW 把向量组织成分层小世界图,上层稀疏、下层稠密,查询从顶层入口点开始贪心地向近邻移动。关键参数是 M(每个节点的连接数)和 efConstruction(建图时的候选队列长度),查询时用 efSearch 控制搜索宽度。HNSW 的召回率和延迟都比较稳定,但内存开销大,构建也慢,删除和更新更麻烦,很多系统采用标记删除加定期重建来处理。

如何选型

如果数据规模在十万以内、内存充足,Flat 的确定性很有吸引力。百万级、内存敏感的场景,IVF-PQ 更合适。对延迟和召回率都苛刻的在线服务,HNSW 往往是首选,但要接受它的内存成本。无论选哪种,都应该用真实业务查询构造评测集,同时看召回率、P99 延迟和内存三项指标,而不是只看某个压测报告里的单一数字。

结语

向量索引没有最好,只有匹配。理解每种结构背后的取舍,才能在上线后遇到召回率下降或延迟抖动时,快速判断问题出在参数、数据分布,还是索引本身已经不适合当前规模。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。