一、为什么需要索引没有索引时Milvus 会做暴力搜索FLAT把查询向量和 Collection 里每一个向量都算一遍相似度然后排序取 Top-K。这种方式精度 100%但速度随数据量线性下降。100 万条数据可能还能忍1 亿条就完全不可用了。索引的核心思想是用少量精度损失换取大幅速度提升。二、Milvus 支持的索引类型1. FLAT暴力索引原理不做任何预处理查询时遍历所有向量。特性说明精度100%速度慢随数据量线性下降内存等于原始向量大小适用场景数据量小10万或需要 100% 精度index_params { index_type: FLAT, metric_type: COSINE }2. IVF 系列倒排文件索引原理先用聚类算法把所有向量分成nlist个簇查询时只搜索最近的nprobe个簇。索引说明IVF_FLAT基础版簇内用 FLAT 搜索IVF_SQ8标量量化内存减少 75%IVF_PQ乘积量化内存大幅减少精度有损关键参数参数说明建议值nlist聚类簇数4 × sqrt(N)N 是数据量nprobe查询时搜索的簇数nlist的 1%-10%index_params { index_type: IVF_FLAT, metric_type: COSINE, params: {nlist: 128} } # 查询时 search_params { metric_type: COSINE, params: {nprobe: 16} }nprobe 的权衡nprobe越大 → 精度越高速度越慢nprobe越小 → 精度越低速度越快3. HNSW原理构建一个多层图结构查询时从顶层开始逐层向下搜索类似“跳表”的思想。特性说明精度高通常 95%速度快毫秒级内存较大需要存储图结构适用场景高并发、低延迟场景关键参数参数说明建议值M每个节点的最大连接数16-64efConstruction构建时的搜索范围100-500ef查询时的搜索范围50-200index_params { index_type: HNSW, metric_type: COSINE, params: {M: 16, efConstruction: 200} } # 查询时 search_params { metric_type: COSINE, params: {ef: 100} }ef 的权衡ef越大 → 精度越高速度越慢ef必须 ≥limit返回数量4. DiskANN磁盘索引原理基于磁盘的图索引适合超大规模数据十亿级。特性说明精度高速度中等受磁盘 IO 影响内存低数据存在磁盘适用场景超大规模、内存受限index_params { index_type: DISKANN, metric_type: COSINE, params: {} }5. SCANNGoogle 的索引特性说明精度高速度快适用场景大规模、高精度要求6. GPU 索引Milvus 支持 GPU 加速的索引类型索引说明GPU_IVF_FLATGPU 版 IVF_FLATGPU_IVF_PQGPU 版 IVF_PQGPU_CAGRANVIDIA 的图索引适用场景极高吞吐量、可接受 GPU 成本。三、索引类型对比索引精度速度内存构建速度适用场景FLAT100%慢高快小数据、高精度IVF_FLAT高中中中通用场景IVF_SQ8中高中低中内存受限IVF_PQ中快极低慢超大规模HNSW高快高慢高并发低延迟DiskANN高中极低慢十亿级数据GPU_CAGRA高极快高中高吞吐场景推荐索引原因原型开发FLAT简单、精度高中小规模通用IVF_FLAT平衡精度和速度高并发低延迟HNSW查询快内存受限IVF_SQ8 / IVF_PQ压缩向量十亿级数据DiskANN磁盘存储极致吞吐GPU_CAGRAGPU 加速备注索引参数nprobe、ef需要在精度和速度之间调优五、索引的创建与管理1. 创建索引# 创建 HNSW 索引 client.create_index( collection_namedocuments, index_params{ index_type: HNSW, metric_type: COSINE, params: {M: 16, efConstruction: 200} } )2. 查看索引# 查看索引信息 indexes client.list_indexes(collection_namedocuments) print(indexes) # 查看索引详情 index_info client.describe_index( collection_namedocuments, index_namevector ) print(index_info)3. 删除索引client.drop_index( collection_namedocuments, index_namevector )六、索引与召回率的关系召回率 检索到的相关结果数 / 所有相关结果数FLAT召回率 100%但慢索引召回率略降但速度大幅提升原则召回率降低是可控的通过调整参数可以让召回率接近 100%同时保持高速。
