HNSW 和 IVF 向量索引怎么选?
面试怎么回答
HNSW 是图索引,通过多层近邻图导航,通常低延迟和召回表现好,但内存与构建成本较高;IVF 先聚类分桶,查询只扫描 nprobe 个桶,更适合通过分桶和 PQ 控制大规模存储成本,但需要训练并仔细调参。我不会只按数据量拍板,而会用 Ground Truth 对比 Recall@K、P95、QPS、内存、更新和过滤效果,再选择满足业务 SLA 的 Pareto 点。
先把这段讲顺;面试官追问时,再展开下面的原理和细节。
详细讲解
同一批向量,HNSW 查得快、召回高,内存却不断上涨;IVF 内存压力小一些,参数没调好时又容易漏结果。
面试官真正想听的,不是两个缩写的定义,而是你能不能说清它们的检索路径和取舍。
HNSW 用图导航逼近近邻,IVF 先聚类再只扫描部分桶;选择时要一起看数据规模、内存、更新方式、过滤条件和召回—延迟目标。
HNSW:沿着近邻图逐步靠近答案
HNSW 会为向量建立多层近邻图。查询从稀疏高层快速定位大致区域,再到更密集的底层寻找候选。
它通常有较好的低延迟和召回表现,也不需要像 IVF 那样先训练聚类中心。但图结构会增加内存,构建成本不低,大量删除和频繁重建也需要关注。
关键参数包括 M、efConstruction 和 efSearch。增加邻接边或扩大搜索范围通常能提高召回,但会消耗更多内存、构建时间或查询时间。
IVF:先找到可能的桶,再扫描桶内向量
IVF 先把向量聚成多个倒排桶。查询先找到最近的若干聚类中心,只扫描这些桶里的候选,而不是全量比较。
nlist 决定桶的数量,nprobe 决定一次搜索多少个桶。nprobe 越大,召回通常越高,但扫描量和延迟也会上升。IVF 需要代表性训练样本,数据分布发生明显变化后还要考虑重新训练或重建。
IVF 还可以与 PQ 组合压缩向量,降低内存,但会再引入量化误差。

怎么选?看五个问题
第一,数据规模和内存预算。中等规模、内存充足、追求高召回低延迟时,HNSW 常是直接选择;超大规模且需要压缩时,IVF/PQ 更有空间优势。
第二,写入和删除。持续增量写入、频繁删除时,要验证具体实现的可见性、墓碑和重建机制,不能只看算法论文。
第三,过滤比例。租户或权限条件会缩小候选集,过滤执行在索引前、索引中还是检索后,会显著影响召回与性能。
第四,构建窗口。HNSW 构图和 IVF 训练都有成本,必须评估全量重建、增量更新和故障恢复时间。
第五,业务目标。用固定评测集画出 Recall@K、P95 延迟、QPS、内存的曲线,而不是拿默认参数比一次结果。

一个典型误区
有的团队只把 efSearch 或 nprobe 调大,看到召回提升就上线。结果高峰期 P99 延迟明显上升,或者过滤后有效候选不足。
正确测试应覆盖不同查询难度、租户规模、过滤条件和并发,并保留 Flat 精确检索的小样本结果作为 Ground Truth。没有基准答案,就不知道近似索引到底漏了多少。