最近在做一个以图搜图的练手项目,用 Milvus 存了 10 万条 512 维的向量。刚开始用 FLAT 暴力搜,虽然慢但结果还算准。后来听人说建 IVF_SQ8 索引能快很多,我就直接建了,nlist 设的 1024,结果查询速度没感觉快多少,反而有时候返回的结果和之前对不上,nprobe 我瞎设的 16。现在有点懵,是不是索引类型选错了?还是参数需要根据数据量调?有没有过来人指点一下,查资料看得头大……
楼主
29天前
Milvus 插入 10 万条向量后查询反而变慢了,是我索引建错了吗?
请 登录 后发表回复
全部回复
共 3 条
2楼
28天前
10万条用IVF_SQ8有点亏,量化损失精度还快不了多少,nprobe开到64试试。
3楼
27天前
nlist 1024 对 10 万条数据来说有点大了,一般建议 nlist 取 sqrt(N) 左右,差不多 300 上下就行,太大反而每个簇里样本少、召回掉得厉害。nprobe 设 16 也偏低,可以试着调到 nlist 的 5%~10%,速度和召回再平衡一下。结果对不上大概率是 IVF 本身是近似检索,跟 FLAT 精确结果有差异很正常,想兼顾可以换 HNSW 试试。
4楼
17天前
nlist 1024 对10万数据太大了,nprobe 16 也偏低,难怪召回不准,先降到 nlist 128 试试。