向量索引怎么选:HNSW、IVF 与量化索引的取舍

人工智能 · 2026-10-07

向量检索的性能瓶颈通常在索引而不是模型。本文对比 HNSW、IVF 与量化三类索引的取舍,给出按数据规模选型的判断顺序,并说明「先过滤再检索」为何容易踩坑。


三类主流索引在取舍什么

**HNSW(图索引)**

  • 特点:把向量连成多层邻居图,检索时沿图跳转;
  • 优点:召回率高、延迟低,最省心;
  • 代价:**内存占用大**(图结构本身要常驻内存),构建慢,删除/更新代价高。
  • **IVF(倒排 + 聚类)**

  • 特点:先用聚类把向量分桶,检索时只扫最相近的几个桶;
  • 优点:内存友好、可按桶并行,数据量大时成本可控;
  • 代价:桶边界附近的向量容易被漏掉 → 需要调 `nprobe`(扫几个桶),**召回率与延迟直接对冲**。
  • **量化索引(PQ / SQ / 二值)**

  • 特点:把向量压缩成更短的编码(乘积量化/标量量化);
  • 优点:内存能降一个数量级,适合千万级以上;
  • 代价:距离是**近似**的,通常要配合「先粗筛再精排」两段式,否则精度损失明显。
  • 按数据规模的判断顺序

    1. **十万以内**:直接用 HNSW(或数据库默认索引),别过早优化;

    2. **百万级**:HNSW + 标量量化(SQ)通常是性价比最高的组合;

    3. **千万级以上或内存受限**:IVF-PQ 或磁盘型索引,并接受「粗筛 + 精排」的两段式结构;

    4. **更新非常频繁**:优先选支持增量更新的方案,不要为了召回率选一个「重建一次要几小时」的索引。

    三个容易踩的坑

  • **先过滤再检索**:带业务条件(时间、租户、类目)的查询,如果先过滤再向量检索,过滤后的集合可能很小,图索引会退化成近似全扫;正确做法通常是「向量检索取较多候选 → 再按条件过滤 → 精排」;
  • **只看平均延迟**:要看 **P95/P99**。图索引的尾延迟受入口点选择影响,均值好看不代表用户不卡;
  • **用错相似度**:索引是按某种距离构建的(内积或余弦),查询时换成另一种距离,结果会明显变差。**建索引与查询必须同一种度量**。
  • 怎么验证选型是否合适

    准备一份带标注的「查询 → 正确文档」集合(几百条即可),比较三个指标:**召回率@K**(该出现的有没有出现)、**P95 延迟**、**内存占用**。三者与你业务的优先级对齐后,再决定要不要上更复杂的索引——**先有度量,再谈调参**。

    想要你的品牌在AI回答里被推荐?

    免费诊断 →