游乐游手机版
首页/AI热点日报/热点详情

向量索引选型:选错成本高十倍,一文读懂

类型:热点整理2026-07-18
向量索引选型若未正确选择,性能损失可能高达十倍。随着数据规模增大,索引类型的选择直接决定查询效率与资源开销。究竟该如何挑选?下面用十分钟梳理不同场景下的选型策略。 在使用Milvus构建向量检索系统的过程中,许多开发者经常在“该选哪种索引”这一步陷入困境。是以精度优先的FLAT,还是速度更快的IVF

向量索引选型若未正确选择,性能损失可能高达十倍。随着数据规模增大,索引类型的选择直接决定查询效率与资源开销。究竟该如何挑选?下面用十分钟梳理不同场景下的选型策略。

在使用Milvus构建向量检索系统的过程中,许多开发者经常在“该选哪种索引”这一步陷入困境。是以精度优先的FLAT,还是速度更快的IVF_PQ?是适合实时检索的HNSW,还是面向离线大规模数据的DiskANN?不同索引适配的场景差异显著,选错不仅影响性能,还可能导致资源浪费。

在思考如何选择索引之前,需要先理解一个基础问题:索引的本质是什么?简单来说,就是基于数据规律,构建一种用于加速查找的数据结构。

在向量检索中,索引能显著提升查询效率,但也会带来预处理时间开销、额外存储空间占用,以及搜索过程中的内存消耗。此外,使用索引相比于暴力搜索,召回率通常会出现一定下降,虽然影响有限,但在对精度要求较高的场景中仍需关注。

在Milvus中,索引以字段为单位构建,不同数据类型支持的索引类型也不同。作为一款面向向量检索场景设计的专业数据库,Milvus在向量搜索与标量过滤两方面都提供了丰富的索引选项。

下表展示了字段类型与可用索引类型的对应关系:

Field Data Type

Applicable Index Types

  • FLOAT_VECTOR

  • FLOAT16_VECTOR

  • BFLOAT16_VECTOR

  • INT8_VECTOR

  • FLAT

  • IVF_FLAT

  • IVF_SQ8

  • IVF_PQ

  • GPU_IVF_FLAT

  • GPU_IVF_PQ

  • HNSW

  • DISKANN

  • IVF_RABITQ

BINARY_VECTOR

  • BIN_FLAT

  • BIN_IVF_FLAT

SPARSE_FLOAT_VECTOR

SPARSE_INVERTED_INDEX

VARCHAR

  • INVERTED (Reommended)

  • BITMAP

  • Trie

BOOL

  • BITMAP (Recommended)

  • INVERTED

  • INT8

  • INT16

    INT32

  • INT64

  • INVERTED

  • STL_SORT

  • FLOAT

  • DOUBLE

INVERTED

ARRAY (elements of the BOOL, INT8/16/32/64, and VARCHAR types)

BITMAP (Recommended)

ARRAY (elements of the BOOL, INT8/16/32/64, FLOAT, DOUBLE, and VARCHAR types)

INVERTED

JSON

INVERTED

进行索引选型时,必须综合考虑底层数据结构、内存占用和性能需求等因素。Milvus中的每种索引类型都由三部分组成:数据结构(用于粗过滤)、量化器(用于提升计算效率)和精化器(用于提升结果精度)。量化器和精化器虽为可选项,但整体性价比很高。

数据结构

数据结构是索引的基础层,常见结构包括:

(1)倒排文件(IVF)

IVF系列索引通过质心聚类将向量划分为多个桶。若某桶的质心与查询向量接近,可合理假设该桶内的向量也可能接近查询向量。基于此,Milvus仅扫描质心接近查询向量的桶内向量,而非整个数据集,从而在保持可接受精度的同时降低计算成本。该方案适合需要高吞吐量的大规模数据集。

(2)图结构(Graph-based)

例如HNSW,构建了多层图结构,每个向量与其近邻相连。查询过程从上层粗粒度图开始逐层向下,最终定位最邻近向量,实现对数级搜索复杂度。该结构适合高维空间和低延迟场景。

量化(Quantization)

量化通过对向量进行粗略表示来减少内存与计算开销:

  • 标量量化(如SQ8):将每个维度压缩为一个字节(8位),相比32位浮点数可节省75%内存,同时保留合理准确性。

  • 乘积量化(PQ):将向量分成子向量,用码本进行聚类编码,实现4–32倍压缩比,适合内存受限场景,代价是召回率略有下降。

精化器(Refiner)

由于量化会导致信息损失,为保持召回率,量化通常会多返回候选结果,供精化器以更高精度重新筛选出topK。例如,FP32精化器会使用32位浮点数重新计算距离,以替代使用量化向量计算出来的距离。这种机制对语义搜索、推荐系统等要求高精度的场景至关重要。

性能

评估索引性能时,应平衡建索时间、QPS与召回率,通常遵循以下规律:

  • 图索引在QPS表现上通常优于IVF;

  • IVF更适用于topK较大的场景(如>2000);

  • PQ在相似压缩率下召回率优于SQ,但SQ性能更快;

  • 将索引部分内容存储于硬盘(如DiskANN)适合超大数据集,但可能出现IOPS瓶颈。

容量

容量涉及数据量与可用内存的关系,建议如下:

  • 若原始数据的1/4可放入内存,使用DiskANN可获得稳定延迟;

  • 若全部数据可放入内存,可使用基于内存的索引+mmap;

  • 若需最大容量,可结合量化索引与mmap,牺牲部分精度换取容量。

注意:mmap并非万能,若大部分数据在磁盘,DiskANN延迟表现更优。

召回率

召回率与过滤比例密切相关:

  • 过滤比例<85%:图索引优于IVF;

  • 过滤比例85%–95%:使用IVF;

  • 过滤比例>98%:使用Brute-Force(FLAT)最准确。

提示:以上为经验规律,实际推荐测试不同索引类型以调优召回率。

性能(按top-K)

top-K指每次查询返回的结果数量:

  • 小topK(如2000及以下)+高召回:图索引更优;

  • 大topK:IVF优于图索引;

  • 中等topK+高过滤:IVF表现更佳。

内存占用估算

索引的内存占用与其数据结构、量化压缩率及是否使用精化器有关。一般来说:

  • 图索引(如HNSW)内存开销较大,每个向量需存图结构;

  • IVF系列因簇内向量较少,内存效率更高;

  • DiskANN可将图结构与精化器部分移至磁盘,减少内存压力。

IVF内存估算(100万条128维向量):

  • 质心:2000 × 128 × 4字节 = 1 MB

  • 向量分簇:100万 × 2字节 = 2 MB

  • 量化压缩(任选其一):
    PQ(8子量化器):8 MB
    SQ8(128维 × 1字节):128 MB

  • 精化开销(topK=10,扩展率=5):50 × 128 × 4 = 25.6 KB

图索引内存估算(HNSW)

  • 图结构:100万 × 32 × 4字节 = 128 MB

  • 原始向量:100万 × 128 × 4字节 = 512 MB
    总计:640 MB

  • 使用PQ压缩:100万 × 8字节 = 8 MB
    总计:128 MB + 8 MB = 136 MB

  • 精化开销:同上为25.6 KB

其他注意事项

  • IVF与图索引适合结合量化器优化内存;

  • mmap与DiskANN可应对数据量超出内存场景。

其中,DiskANN基于Vamana图结构,通过PQ压缩向量,在硬盘上建立可导航索引,适用于十亿级数据集。mmap(内存映射)则支持将磁盘文件映射到内存空间,无需完全加载字段数据即可访问,有效减少I/O开销,提升系统容量并保持良好搜索性能。

如果上文读完还是记不住,下面这张表可以直接保存下来,对照着选就行。

来源:https://www.53ai.com/news/LargeLanguageModel/2025062480319.html

相关热点

继续查看同栏目近期热点。

延伸阅读

补充最近整理过的热点入口。