三类主流索引在取舍什么
HNSW(图索引)
- 特点:把向量连成多层邻居图,检索时沿图跳转;
- 优点:召回率高、延迟低,最省心;
- 代价:内存占用大(图结构本身要常驻内存),构建慢,删除/更新代价高。
IVF(倒排 + 聚类)
- 特点:先用聚类把向量分桶,检索时只扫最相近的几个桶;
- 优点:内存友好、可按桶并行,数据量大时成本可控;
- 代价:桶边界附近的向量容易被漏掉 → 需要调
nprobe(扫几个桶),召回率与延迟直接对冲。
量化索引(PQ / SQ / 二值)
- 特点:把向量压缩成更短的编码(乘积量化/标量量化);
- 优点:内存能降一个数量级,适合千万级以上;
- 代价:距离是近似的,通常要配合「先粗筛再精排」两段式,否则精度损失明显。
按数据规模的判断顺序
- 十万以内:直接用 HNSW(或数据库默认索引),别过早优化;
- 百万级:HNSW + 标量量化(SQ)通常是性价比最高的组合;
- 千万级以上或内存受限:IVF-PQ 或磁盘型索引,并接受「粗筛 + 精排」的两段式结构;
- 更新非常频繁:优先选支持增量更新的方案,不要为了召回率选一个「重建一次要几小时」的索引。
三个容易踩的坑
- 先过滤再检索:带业务条件(时间、租户、类目)的查询,如果先过滤再向量检索,过滤后的集合可能很小,图索引会退化成近似全扫;正确做法通常是「向量检索取较多候选 → 再按条件过滤 → 精排」;
- 只看平均延迟:要看 P95/P99。图索引的尾延迟受入口点选择影响,均值好看不代表用户不卡;
- 用错相似度:索引是按某种距离构建的(内积或余弦),查询时换成另一种距离,结果会明显变差。建索引与查询必须同一种度量。
怎么验证选型是否合适
准备一份带标注的「查询 → 正确文档」集合(几百条即可),比较三个指标:召回率@K(该出现的有没有出现)、P95 延迟、内存占用。三者与你业务的优先级对齐后,再决定要不要上更复杂的索引——先有度量,再谈调参。