标准回答
HNSW(图结构 ANN)(独占一行)
构建一个多层的可导航小世界图,上层稀疏用于快速跳转、底层稠密。查询时从顶层入口贪心地向最近邻逼近。优点是召回率高、查询延迟低且对参数较鲁棒;缺点是图要常驻内存、内存占用大,构建(插入)较慢。关键参数 M(每点连边数)、efConstruction(建图质量)、efSearch(查询时搜索宽度,越大越准越慢)。
IVF(倒排聚类)
先用 k-means 把向量空间划成 nlist 个簇(cell),每个向量归属一个簇。查询时只在距离最近的 nprobe 个簇中做精搜。构建快、内存占用低,精度由 nprobe 线性可调;常叠加 PQ(乘积量化)进一步压缩内存。缺点是 nprobe 太小会漏召回,需要按数据分布调参。
选型
追求低延迟、高召回且内存充足——选 HNSW(默认首选,如 向量数据库 中常用)。数据规模极大、内存/成本敏感、能接受调参与构建批处理——选 IVF 或 IVF+PQ。两者也可组合(如 HNSW 作为粗筛 + 精排)。
常见误区
⚠️ 常见踩坑
别说「HNSW 一定比 IVF 准」——HNSW 默认召回高但内存代价大;在十亿级、内存受限场景,IVF+PQ 往往是更现实的工程选择,精度可通过 nprobe 和重排补回。
追问
追问 1:efSearch 和 nprobe 分别调大会怎样?
两者都是「用延迟换召回」的旋钮:efSearch(HNSW)增大搜索宽度、nprobe(IVF)增大扫描簇数,召回率上升、查询变慢。生产中按延迟预算二分调到满足召回阈值为止。
追问 2:PQ 量化为什么能省内存,代价是什么?
PQ 把高维向量切成子段并用码本量化为字节码,内存可压缩到原来的几十分之一。代价是引入量化误差、召回略降,通常配合「PQ 粗筛 + 原始向量精排」找回精度。
追问 3:数据频繁更新时哪种索引更友好?
HNSW 支持增量插入但删除需标记+定期重建,图维护成本高;IVF 在大量更新后簇分布漂移需重训聚类。高频更新场景常采用分段索引+后台重建,或选对增量更友好的实现。
延伸学习
与本题相关的知识库文章、术语、工具与行业资讯。
🛠️ AI 工具