Generated by Answer me with HTML 0.5.7 · 2026-10-23 09:29 · ★ Star on GitHub

HNSW vs IVF-PQ 内存对比

你当前 1912 条 1024 维向量,索引只占约 8 MB

sourcechromadb 1.5.9 · 实测 2026-10-23
结论:对你来说省不了内存
  • 你现在跑的是 HNSW,索引实占约 8.2 MB。
  • server 进程 RSS 330 MB,向量只占 2.4%。
  • 换 IVF-PQ 省不到 7 MB,却要重建索引并损失召回。
A

两种索引的本质区别

维度 HNSW IVF-PQ
数据结构 分层可导航小世界图 倒排聚类加乘积量化
向量精度 保留原始 float32 有损压缩 64 到 384 倍
查询方式 图上贪心遍历 先选簇再逐条比
建索引 无需训练,边插边建 需 k-means 训练码本
删除支持 支持标记删除 只能整库重建
单条内存 约 4.2 KB 约 64 到 256 B
适合规模 百万条以内 千万级以上
你的环境 HNSW 在用 未安装
B

内存实算:按你的 1912 条

024687.83HNSW 向量本体0.26HNSW 邻接表加 id0.67IVF-PQm=64 压缩后
数据
HNSW 向量本体7.83
HNSW 邻接表加 id0.26
IVF-PQ m=64 压缩后0.67
  • 单条 = 1024 维 × 4 字节 = 4 KB。
  • 1912 条合计 7.83 MB。
  • 邻接表 level0 = M16 即 32 邻居 × 4 字节。
  • M 是 HNSW 每层连边上限,默认 16。
  • IVF-PQ 设 m=64,单条压到 64 字节。
C

什么时候 IVF-PQ 才划算

向量条数1912 / max 1000000 条
  • 到百万条,float32 要 4.1 GB。
  • 同规模 PQ 压到约 64 MB。
  • 差两个数量级,省内存才有意义。
  • 你的库距这门槛还差 500 倍。
真要省内存,先看别处

RSS 330 MB 里向量只占 8 MB。大头是 Python 运行时、sqlite 缓存和 embedding 请求缓冲。改索引等于拧错螺丝。