07 向量数据库:索引原理、混合检索与性能优化
更新: 2026-10-12
时效说明:产品能力与参数以官方文档为准;涉及市场格局和产品能力的描述截至 2026-10。本文不提供脱离数据集、硬件和召回目标的"万能性能数字"。
📋 核心面试题
Q: 向量数据库有哪些索引?分别有啥区别和原理?
先给结论:不能按"几十万用 Flat、几百万用 HNSW、上亿用 IVF/LSH"机械选型。数据量只是约束之一,真正决定索引的是:
- 目标:Recall@k / nDCG、P50/P95/P99 延迟、QPS、更新可见性。
- 数据:维度、距离度量、分布、重复度、是否归一化、过滤选择率。
- 请求:top-k、批大小、读写比、过滤条件、是否多向量。
- 硬件:DRAM、SSD、CPU SIMD、GPU 显存与数据搬运成本。
- 运维:构建时间、增量更新、删除、压缩、备份和多租户隔离。
正确流程是:建立 Flat 精确检索真值集,固定质量门槛,再对候选索引做真实数据基准测试。
1. Flat / Brute Force
- 对所有向量计算精确距离,结果可作为 ANN 的 ground truth。
- 优点:无需训练和建图;批量矩阵计算在 GPU 上可能非常高效。
- 缺点:扫描成本随向量数线性增长。
- 适用:数据较小、批量 GPU 搜索、召回率必须为 1、离线评测或 ANN 二阶段精排。
"Flat 只能用于小数据"也不准确:大批量、向量常驻 GPU 且延迟预算允许时,暴力搜索可能比复杂索引更合适。
2. HNSW
HNSW 是分层近邻图:
- 上层稀疏图负责远距离跳转,底层稠密图负责局部搜索。
M控制每个节点的连接预算;efConstruction控制构建搜索宽度;查询ef控制候选宽度。- 通常具有较好的高召回与低延迟,但图和原始向量需要较多内存。
- 动态插入友好;删除、压缩和分布式重平衡取决于具体实现。
HNSW 并不天然适合所有过滤查询。若先建全局图再强过滤,图路径可能大量落到不合格节点;需要 payload/scalar 索引、过滤感知遍历、分区或迭代过滤配合。
3. IVF 系列
IVF 先用粗量化器把向量分到 nlist 个桶,查询只探测 nprobe 个桶:
IVF_FLAT:桶内保留原始向量,精度较高,内存仍大。IVF_SQ:标量量化,降低内存与带宽。IVF_PQ:桶内存 PQ 编码,大幅压缩,但会引入近似误差。nlist过小会扫描过多,过大则训练、长尾桶和探测不足问题更明显。nprobe越大通常召回越高、延迟越高,但关系由数据分布决定。
IVF 适合可训练、批量查询、可接受聚类重训或重建的场景;并不是"大数据必选"。
4. PQ、OPQ 与现代量化
Product Quantization 把向量切成子空间,每段用码本编号表示,查询时用查表近似距离。OPQ 在 PQ 前学习旋转,减少子空间切分带来的误差。
量化的价值不只是"省磁盘",还包括:
- 减少 DRAM / 显存占用和内存带宽。
- 扩大候选集后,用原始向量或更高精度编码 rerank。
- 与 IVF、图索引、SSD 索引组合。
截至 2026-10,量化不应只背 PQ:
- ScaNN / AVQ 对最大内积搜索更重视影响 top-k 排名方向上的误差。
- SOAR 通过正交残差驱动的多重分桶降低漏检。
- RaBitQ(SIGMOD 2024) 将 D 维向量编码为 D bit,并给出无偏距离估计和理论误差界;它是现代候选方案,不等于所有数据库都已生产支持。
5. LSH
LSH 用随机投影等哈希族让近邻更可能落入同桶。
- 理论性质清晰,可做近似集合/相似检索。
- 高召回通常需要多表或多探针,内存与候选数会增长。
- 在通用 dense embedding 检索中,工程主流通常是图、IVF/量化或磁盘索引。
- 只有在距离族、数据分布和更新需求匹配时再选,不应把 LSH 当作"超大规模默认答案"。
6. SSD 索引:DiskANN / Vamana 与 SPANN
DiskANN 的关键不是"某个固定 QPS",而是分层存储设计:
- Vamana 图负责可导航性。
- 压缩向量等热数据留在内存,完整向量和图数据可放 SSD。
- 查询用 beam search 控制并发访问和候选宽度,再以高精度向量重排。
- 适合数据显著大于 DRAM、SSD 随机读能力足够、读多写少的场景。
SPANN 是内存---磁盘混合倒排路线:
- 内存保存中心点,磁盘保存 posting lists。
- 平衡聚类、边界复制和 query-aware pruning 用来控制磁盘访问与召回。
- 与 DiskANN 的图路线不同,应以真实工作负载比较 SSD I/O、召回、尾延迟和构建成本。
论文中的硬件和数据集数字只能作为论文结果,不能直接承诺生产 SLA。
7. GPU ANN:CAGRA / cuVS
CAGRA 是为 GPU 设计的图 ANN:
- 先构建 kNN 图,再剪枝冗余路径。
- cuVS 可用 IVF-PQ 或 NN-Descent 构建初始图。
- 查询核心旋钮包括
itopk_size、search_width和并发批量。 - GPU 优势依赖数据驻留、批量和算力利用率;小批请求若频繁 CPU↔GPU 拷贝,收益可能被吞掉。
Milvus 的 GPU_CAGRA 还支持将 CAGRA 图转换为 CPU 可搜索格式。选择前必须检查过滤、range/grouping、增量更新和硬件兼容矩阵。
🎯 可靠选型方法
不要先问"有多少条",先按以下步骤:
- 定义真值:从生产分布抽样 query,用 Flat 得到 exact top-k。
- 定义质量:Recall@k、nDCG@k、业务成功率;不能只看平均召回。
- 定义 SLA:P50/P95/P99、QPS、并发、批量、冷启动。
- 加入过滤:按真实租户、时间、权限和类别分布测试不同选择率。
- 加入写入:测索引刷新、删除、compaction 和副本重建。
- 计完整成本:原始向量、图边、量化码、metadata、WAL、副本、SSD IOPS 和 GPU 空闲率。
- 画 Pareto 前沿:质量相同时比成本/延迟,或成本相同时比质量。
常见候选起点:
- 低变更、高召回、可放 DRAM:HNSW / 图索引。
- 数据超出 DRAM、SSD 友好:DiskANN/Vamana 或 SPANN 类实现。
- 批量大、GPU 常驻:CAGRA、GPU IVF、GPU Flat。
- 内存/显存紧张:IVF-PQ、OPQ、RaBitQ 类量化加精排。
- 强过滤:优先验证数据库的 scalar/payload 索引与过滤感知算法。
- 多向量:单向量召回后 late-interaction 重排,或使用原生 multivector 索引。
混合检索与重排
Q9: 混合检索的融合策略有哪些?RRF 算法详解
混合检索通常融合 BM25 / sparse、dense、多向量和业务特征。
加权分数融合
先把不同检索器分数校准到可比尺度:
text
score(d) = w_sparse * norm(s_sparse)
+ w_dense * norm(s_dense)
+ w_fresh * freshness(d)
风险:min-max 对异常值敏感;不同 query 的分数分布漂移。生产中应在验证集学习权重或做分桶校准。
Reciprocal Rank Fusion
RRF 只使用名次:
text
RRF(d) = Σ_i 1 / (k + rank_i(d))
- 优点:无需校准不同分数,单个检索器的极端分数不易主导。
- 缺点:忽略名次间真实分差;
k和各路候选深度仍需验证。 k=60是经典论文常用值,不是固定生产最优值。
学习融合
候选充足时可训练 Learning-to-Rank 或轻量模型,以 sparse/dense 分数、字段匹配、时效、权限和点击特征作为输入。必须防止位置偏差、泄漏和反馈回路。
Q10: Pinecone、Milvus、Qdrant、Weaviate 怎么选?
截至 2026-10,不应凭"谁最快"选数据库:
- Pinecone:托管优先,减少集群运维;重点评估 region、隔离、备份、计费和可移植性。
- Milvus:索引与硬件路线丰富,适合自托管/云托管及大规模分布式;运维复杂度更高。
- Qdrant:payload filtering、统一 Query API、多向量/late interaction 体验突出。
- Weaviate:对象/schema、混合检索和模块化集成成熟。
统一 PoC 清单:
- 目标索引是否支持你的 metric、过滤、range/grouping、multi-vector。
- 一致性、增删可见性、备份恢复、滚动升级是否达标。
- 多租户隔离是逻辑、分片还是独立集群。
- SDK 是否支持超时、重试、异步、批写和幂等。
- 用一年总成本比较,不只比单次查询价格。
产品能力会快速变化,应从官方当前文档生成能力矩阵,不在面试中背静态排名。
Q11: 什么是向量数据库的混合搜索?为什么重要?
Dense 擅长语义同义,sparse/BM25 擅长专名、编号和精确词。可靠流水线通常是:
text
query
├─ sparse / BM25 ─┐
├─ dense ANN ─────┼─ fusion ─ reranker ─ policy filter ─ top-k
└─ metadata rules ┘
注意两类过滤:
- 安全过滤(权限、租户、合规)必须保证结果集合正确,不能只在 top-k 后过滤,否则可能少结果或越权。
- 业务过滤(时间、类别)可以在 pre-filter、graph-aware、iterative filter 间按选择率取舍。
Milvus filtered search 区分标准过滤和迭代过滤;Qdrant filtering 强调为常用字段建立 payload index。过滤选择率必须进入基准测试。
Q12: 什么是 DiskANN?它和 HNSW、SPANN、GPU 索引怎么选?
- HNSW:数据与图主要在 DRAM,随机内存访问快,容量成本高。
- DiskANN/Vamana:以 SSD 承载大索引,内存放压缩表示/热点;看 SSD 随机读和 beam 参数。
- SPANN:内存中心点 + 磁盘 posting lists;看聚类、边界复制和磁盘批读。
- CAGRA/cuVS:GPU 图检索;看批大小、显存容量和传输成本。
不存在只由数据量决定的分界线。同一数据规模下,过滤选择率、写入率和硬件可改变最优解。
面试回答应明确:论文报告的"十亿向量、毫秒级"只在论文指定数据集和硬件下成立。工程结论应来自自己的 recall-latency-cost 曲线。
Q13: 为什么需要两阶段检索?Cross-Encoder 与 ColBERT 有什么区别?
第一阶段追求高召回,第二阶段对较小候选集提高排序质量:
text
ANN/BM25 召回 100~1000(示意范围)
→ reranker
→ 业务规则/去重
→ 返回 top-k
上述候选数是示意值,必须通过召回曲线和延迟预算确定。
- Cross-Encoder:把 query 与每个文档拼接后完整编码,交互充分、成本随候选数线性增加,适合小候选集精排。
- Bi-Encoder:query/doc 独立编码成单向量,最易 ANN,交互最弱。
- ColBERTv2:保留 token 级多向量,用 MaxSim 做 late interaction,质量/成本位于两者之间。
- Qdrant multivectors 展示了 dense 预取后用多向量重排;若只用于重排,可关闭该字段 HNSW,避免为每个 token 建图。
多向量会放大存储和计算,需考虑残差压缩、候选剪枝、PLAID 类引擎或只在二阶段使用。
Q14: HNSW 生产调参:M、efConstruction、ef 如何选择?
三者作用:
M:图连接预算;提高可能改善可导航性,也增加内存、构建和更新成本。efConstruction:建图候选宽度;提高通常改善图质量,边际收益会下降。ef/efSearch:查询候选宽度;必须不小于 top-k,最优比例没有通用常数。
可靠调参步骤:
- 固定数据快照、距离度量和 exact truth。
- 选多个
M,分别扫efConstruction,记录索引大小、构建时长与召回。 - 对入选索引扫描 query-time
ef,画 Recall@k--P95/P99。 - 对不同过滤选择率、top-k、冷热缓存和并发分别测试。
- 验证插入后召回、删除/压缩、重启加载和副本重建。
常见错误:
- 用
向量字节 × (1 + M/2)估算 HNSW 总内存;不同实现的层级、边 ID、对齐和 metadata 不同,应测实际 RSS。 - 宣称
ef = top-k 的 3~5 倍必然达标;它只能作为起测点。 - 只测平均延迟;图遍历、过滤和 SSD 冷缓存更容易暴露尾延迟。
- 把 cosine、inner product、L2 混用;归一化会改变等价关系。
📝 速记卡片
- 选索引看质量、尾延迟、过滤、更新、硬件和总成本,不按数据量口诀。
- HNSW:高召回内存图;IVF:聚类分桶;PQ/RaBitQ:压缩;DiskANN/SPANN:SSD;CAGRA:GPU。
- 过滤检索要把 scalar/payload 索引与 ANN 联合设计。
- Hybrid 解决语义与精确词互补;RRF 稳健但不是永远最优。
- Late interaction 保留 token 级匹配,通常用于候选重排。
- 所有性能数字都要带数据集、硬件、并发、质量门槛和版本。