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