---
url: /milvus/milvus-index.md
description: 介绍Milvus数据库中索引类型：内存索引、磁盘索引、GPU索引
---

# 一篇文章讲明白向量数据库Milvus的索引如何选择

Milvus数据库的一个Collection中可以分为两类字段：**标量字段**和**向量字段**。标量字段就如同Mysql表中的字段一样，为了提高查询性能，可以对表字段创建索引。向量字段则是一种特殊的字段，为了提高向量查询性能，Milvus提供了多种创建索引的方式。

索引简单说就是用空间换时间，也就是创建索引需要占用一定的存储空间。向量索引根据存储的位置可以分为：**内存索引**、**磁盘索引**、**GPU索引**。本文则为大家介绍常用的内存索引。

> 目前，一个向量场只支持一种索引类型。切换索引类型时，Milvus 会自动删除旧索引。

## 内存索引

由于Milvus的嵌入可以分为三个类型：浮点嵌入、二进制嵌入、稀疏嵌入。根据嵌入类型的不同，Milvus支持的索引类型也会有所差异。

#### 浮点嵌入

![](/img/ef3b3600-7503-4750-9403-b18b6f09519e.png)

该类型索引包括FLAT、IVF\_FLAT、IVF\_PQ、IVF\_SQ8、HNSW和SCANN，都是基于 CPU 的 ANN 搜索。可以选择的距离度量（metric\_type）有：欧式距离（L2）、内积（IP）、余弦相似度（COSINE）

![](/img/2ae7b9dd-0ad9-4e78-aa57-35f66f43c514.png)

|支持的索引 | 分类|场景|
|---| --- | --- |
|平面	|不适用|	数据集相对较小需要  100% 的召回率|
|IVF\_FLAT	|基于量化的索引|	高速查询 要求尽可能高的召回率|
|IVF\_SQ8	|基于量化的索引| 高速查询内存资源有限可接受召回率略有下降|
|IVF\_PQ	|基于量化的索引|极高速查询内存资源有限可接受召回率大幅降低|
|HNSW	|基于图形的索引|非常高速的查询要求尽可能高的召回率内存资源大|
|SCANN	|基于量化的索引|极高速查询要求尽可能高的召回率内存资源大|

#### 二进制嵌入

![](/img/2858c2fd-6164-4399-a614-05a61b519271.png)
该类型索引包括BIN\_FLAT、BIN\_IVF\_FLAT，常用的距离度量有：汉明（HAMMING）、雅卡德（JACCARD）。

![](/img/a400346b-3e99-4630-b4ba-07376b361371.png)

|支持的索引|分类|场景|
| --- | --- | --- |
|BIN\_FLAT	|基于量化的索引|	取决于相对较小的数据集  要求完全准确无需压缩保证精确的搜索结果|
|BIN\_IVF\_FLAT	|基于量化的索引|	高速查询 要求尽可能高的召回率|

#### 稀疏嵌入

![](/img/1a865c32-97b8-4c28-9eea-9dbbd821a254.png)
该类型的索引包括：SPARSE\_INVERTED\_INDEX、SPARSE\_WAND，距离度量只能用内积（IP）。

![](/img/e3c21c7f-37b9-4341-ae54-2f6b7a3e07ed.png)
|支持的索引|分类|场景|
| --- | --- | --- |
|SPARSE\_INVERTED\_INDEX	|倒置索引|	取决于相对较小的数据集  要求 100%的召回率|
|SPARSE\_WAND	|	反向索引|	弱AND算法加速 在牺牲少量召回率的同时，速度也有明显提高|

## 进阶

对于初学者而言，我们可以不用太关注各种类型的索引之间的差异，先对Milvus有一个整体的了解则更重要。但是当我们想要进一步用好Milvus时，就需要大家根据自己的场景选择适合自己的索引类型和距离度量了。想要进一步学习，可以关注：遇码，回复**milvus**获取官方文档。
