向量数据库索引算法三剑客:HNSW、LSH、PQ 原理深度解读
2026/6/24 2:13:41 网站建设 项目流程

向量数据库索引算法三剑客:HNSW、LSH、PQ 原理深度解读

    • 1. 开篇:从“大海捞针”到“精准导航”的密钥
    • 2. 一张图看懂三大算法的定位与协作(多色流程图)
    • 3. HNSW:图结构的“高速路网”
      • 3.1 设计动机:让贪心搜索找到“捷径”
      • 3.2 核心原理:像查地图一样找向量
      • 3.3 关键参数与权衡
      • 3.4 优缺点与适用场景
    • 4. LSH:哈希分桶的“智能分类”
      • 4.1 设计动机:用哈希把“相似的”聚到一起
      • 4.2 核心原理:随机超平面的“切分游戏”
      • 4.3 优缺点与适用场景
    • 5. PQ:向量压缩的“极致瘦身”
      • 5.1 设计动机:让万亿向量也能装进内存
      • 5.2 核心原理:拆碎了分别“编字典”
      • 5.3 距离计算如何加速?——查表法
      • 5.4 PQ的局限性
    • 6. 三类算法横向对比与协同使用
    • 7. 选型速查:场景决定算法
    • 8. 总结:三句话记住三大算法

🌺The Begin🌺点点关注,收藏不迷路🌺

⬇ ⬇ 底部 ⬇ ⬇

1. 开篇:从“大海捞针”到“精准导航”的密钥

在向量数据库的世界里,索引算法决定了一切。没有索引,每一条查询都要和库里的每一个向量做距离计算——1亿条数据就是1亿次浮点运算,再强的服务器也扛不住几秒一次的响应延迟。正是HNSW、LSH、PQ这三类算法,让向量检索从“大海捞针”变成了“精准导航”。

但很多开发者对这三个缩写的理解停留在“知道名字,不清楚原理”的层面——HNSW为什么快?LSH的哈希和传统哈希有什么不同?PQ到底是怎么把向量“压缩”到那么小的?

本文将从设计动机、核心原理、关键参数、适用场景四个维度,把这三类算法彻底讲透。全文配有多色流程图,核心要点采用三色标注,即使没有深厚的数学背景也能看懂它们的“灵魂”。


2. 一张图看懂三大算法的定位与协作(多色流程图)

下图展示了HNSW、LSH、PQ在向量检索中的角色分工。其中蓝色代表索引构建主流程,金色代表三类算法的核心机制,红色代表需要注意的权衡点。

三大算法的核心定位:HNSW擅长图导航快速定位,PQ擅长极致压缩节省内存,LSH擅长哈希分桶快速过滤。三者常被组合使用(如IVF+PQ、HNSW+PQ),各取所长。


3. HNSW:图结构的“高速路网”

3.1 设计动机:让贪心搜索找到“捷径”

HNSW的全称是Hierarchical Navigable Small World(分层可导航小世界网络)。它的设计灵感来自两个经典思想:

  • 跳表(Skip List):一种概率数据结构,通过多层链表让查找从O(N)降到O(log N)
  • 可导航小世界图(NSW):一种基于图的近似最近邻算法,通过节点间的连接实现“六度分隔”式搜索

HNSW把这两个思想融合在一起——用多层图结构,让搜索从顶层快速“跳”到目标区域,再在底层精细定位

3.2 核心原理:像查地图一样找向量

HNSW构建的图结构可以想象成不同缩放级别的地图

  • 底层(Level 0):包含所有数据点,节点密集,连接精细,用于最终精确定位
  • 上层(Level 1, 2, …):只包含部分数据点,逐层稀疏,节点之间的连接距离更长,用于快速“跳跃”

搜索过程分为三步:

  1. 顶层跳转:从最高层的入口节点开始,贪心搜索该层中与查询向量最接近的节点
  2. 层层下降:将上一层的搜索结果作为下一层的入口,重复贪心搜索,逐层逼近目标区域
  3. 底层精搜:在最底层进行局部精细搜索,返回最相似的K个结果

整个过程就像开车找路——先上高速(顶层)快速到达城市附近,再下到普通道路(底层)精确找到目的地。

3.3 关键参数与权衡

HNSW有三个核心参数,直接影响速度、精度和内存的平衡:

参数作用调大效果调小效果
M每个节点的最大连接数召回率↑,精度↑,但内存↑,构建↓内存↓,速度↑,但召回率↓
efConstruction构建时的候选队列长度索引质量↑,但构建时间↑构建速度↑,但索引质量↓
efSearch搜索时的候选队列长度召回率↑,但查询延迟↑查询速度↑,但召回率↓

【实战经验】:Milvus官方建议M在[5, 100]范围内调优,efConstruction在[50, 500]范围内,efSearch在[K, 10K]范围内(K为返回结果数)。

3.4 优缺点与适用场景

优点缺点适用场景
查询复杂度O(log N),亿级数据毫秒响应内存占用高(全量数据需加载到RAM)实时推荐系统、高吞吐在线服务
召回率极高(接近暴力搜索)构建时间较长对精度要求高的语义检索
支持动态插入,无需重建索引删除操作支持不完善数据频繁更新的场景

4. LSH:哈希分桶的“智能分类”

4.1 设计动机:用哈希把“相似的”聚到一起

LSH的全称是Locality-Sensitive Hashing(局部敏感哈希)。传统哈希的目标是“不同的输入尽量映射到不同位置”,而LSH恰恰相反——让相似的输入以高概率映射到同一个“桶”(Bucket)里

它的核心思想可以概括为:“相似的在一起,不相似的各走各的路”。查询时,只需在查询向量命中的桶里搜索,跳过其他所有桶,大幅减少计算量。

4.2 核心原理:随机超平面的“切分游戏”

LSH最常见的实现方式是基于随机投影(Random Projection)

  1. 生成随机超平面:在向量空间中生成K个随机超平面(随机向量)
  2. 计算哈希码:对于每个向量,计算它与每个超平面的位置关系(在正侧为1,负侧为0),得到一个K位的二进制哈希码
  3. 分桶存储:相同哈希码的向量落入同一个哈希桶

当两个向量在空间中距离较近时,它们被这些超平面“切”到同一侧的概率更高,因此哈希码相同的概率也更高。

为了提高召回率,LSH通常会构建L张独立的哈希表(每张表使用不同的随机超平面组)。查询时,在所有L张表中命中同一个桶的候选集合并去重,再进行精细距离计算。

4.3 优缺点与适用场景

优点缺点适用场景
查询复杂度接近O(1),极快需多张表(L)和长哈希码(K)保证精度,内存占用高对延迟极度敏感的场景(如实时推荐)
支持动态插入,更新高效精度相对HNSW较低动态数据集
实现简单,理论成熟参数调优需要经验高维数据的快速初筛

5. PQ:向量压缩的“极致瘦身”

5.1 设计动机:让万亿向量也能装进内存

PQ的全称是Product Quantization(乘积量化)。它解决的不是“检索速度”,而是**“内存容量”**问题——HNSW再快,如果向量太大装不进内存,也跑不起来。

一个768维的float向量占768×4=3072字节。1亿条这样的向量需要约300GB内存。PQ的目标就是把这个数字压缩几十甚至几百倍

5.2 核心原理:拆碎了分别“编字典”

PQ的压缩过程分为三步:

第一步:拆分子向量
将一个高维向量切成m个等长的子向量。例如,768维切成m=8段,每段96维。

第二步:对每段独立聚类
对每一段子向量,用K-Means聚类生成k个“中心点”(即码本/Codebook)。通常k=256(即8位索引)。这就像为每一段编一本“字典”,256个词条代表这段空间中最典型的模式。

第三步:用索引替代浮点数
对于原始向量的每一段,找到该段在码本中最近的中心点,只存储这个中心点的索引编号(8位)。最终,原始的768个浮点数被压缩为8个索引号(8×8=64位)。

压缩效果示例:128维向量,float32占4096位;PQ压缩后(m=64, nbits=8)仅占512位,压缩8倍。高维场景下,压缩比可达256:1

5.3 距离计算如何加速?——查表法

PQ的妙处不止在压缩,还在于距离计算的加速。查询时:

  1. 把查询向量也切成m段
  2. 对每一段,提前计算查询子向量与该段码本中所有256个中心点的距离,生成一张“距离查找表”
  3. 对于库中的任意向量,只需查表、累加m个距离值,即可得到近似距离——避免了解压缩和浮点乘法的开销

5.4 PQ的局限性

  • 精度损失:量化本质是有损压缩,相似的向量可能因量化误差而被判为不相似
  • 训练成本:需要提前在数据上训练K-Means码本,数据量大时训练时间较长
  • 通常不单独使用:PQ一般和IVF配合(即IVF_PQ),先用IVF筛选候选簇,再在候选簇内用PQ做距离近似

6. 三类算法横向对比与协同使用

对比维度HNSWLSHPQ
核心策略图结构导航哈希分桶过滤向量量化压缩
解决什么问题如何快速找到最近邻如何快速跳过无关数据如何节省内存
时间复杂度O(log N)O(1)(查桶)O(N)(需配合IVF)
内存占用中-高极低
召回率极高中-高中(需配合精排)
动态更新支持支持需重训练码本
典型组合HNSWLSH + 多表IVF + PQ(IVF_PQ)

【协同使用】:在实际生产中,三类算法不互斥。例如:

  • HNSW + PQ:用PQ压缩向量后再建HNSW图,既节省内存又保持高速
  • IVF + PQ:最经典的组合,IVF负责粗筛、PQ负责压缩,被Milvus等数据库广泛采用

7. 选型速查:场景决定算法

场景特征推荐算法理由
数据量<10万暴力搜索(FLAT)精度100%,不需要近似
数据量<1亿,追求高召回HNSW精度最高,但内存消耗大
数据量>1亿,内存受限IVF_PQ压缩比极高,可支撑十亿级
实时推荐,延迟<10msHNSW 或 LSH两者都支持极速查询
动态写入频繁LSH 或 HNSW两者都支持增量插入

8. 总结:三句话记住三大算法

HNSW:建一张多层“高速路网”,顶层跳远路、底层走细路,用对数时间找到最近邻。

LSH:用随机超平面把向量“切”成哈希码,相似的切到同一桶,查询只翻桶、不翻全库。

PQ:把向量切成段、每段编字典,用“字典索引号”替代“浮点数”,压缩几十倍,内存压力骤降。

理解了这三句话,你就掌握了向量数据库索引算法的核心精髓。实际应用中,三者常组合使用——HNSW管“找路”,PQ管“瘦身”,LSH管“快速初筛”——共同构建起支撑亿级向量毫秒检索的技术底座。



🌺The End🌺点点关注,收藏不迷路🌺

⬆ ⬆ 顶部 ⬆ ⬆

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询