最近在做一个相似图片检索的小项目,目前用ResNet50提取特征,大概有1000万张图,每张图是2048维的向量。现在用的Milvus,默认建了HNSW索引(M=16,efConstruction=200),但插入数据一多,内存直接顶不住了,查询延迟也开始飘。换成IVF_PQ之后内存倒是降下来了,但召回率明显变低,尤其是一些比较相似的边缘情况。想问问各位老哥,在千万级数据下,为了平衡内存、查询速度和召回率,索引参数一般怎么调?有没有什么经验公式或者推荐的配置组合?另外,如果数据量再翻几倍,是不是得上分布式了?真心求教,项目卡在这了。
楼主
2026-08-27
向量数据库在千万级数据下,用HNSW还是IVF索引更靠谱?
请 登录 后发表回复
全部回复
共 21 条
2楼
13天前
2048维这个维度其实挺尴尬的,HNSW内存爆炸是必然的,图结构本身吃内存就凶,M=16在千万级下基本等于把向量和邻居全塞内存里了。我之前也踩过这个坑,后来是先做了一轮PCA降到512维再建HNSW,召回掉得不多但内存直接砍到四分之一左右,你可以试试看。IVF_PQ召回低主要是PQ量化压得太狠,nlist和m这两个参数得细调,nlist一般按sqrt(N)到4倍sqrt(N)之间试,m别低于32,不然相似图片这种细粒度任务确实容易丢。另外efSearch也得跟着提,默认值在千万级下根本不够用。真要翻几倍的话,单机基本别想了,Milvus分片加副本是标配,但分片键选不好跨片查询会更慢。你也可以考虑下DiskANN那套思路,把索引放SSD上,内存压力小很多,就是延迟比纯内存高一点。