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
结论:对你来说省不了内存
- 你现在跑的是 HNSW,索引实占约 8.2 MB。
- server 进程 RSS 330 MB,向量只占 2.4%。
- 换 IVF-PQ 省不到 7 MB,却要重建索引并损失召回。
两种索引的本质区别
| 维度 | HNSW | IVF-PQ |
|---|---|---|
| 数据结构 | 分层可导航小世界图 | 倒排聚类加乘积量化 |
| 向量精度 | 保留原始 float32 | 有损压缩 64 到 384 倍 |
| 查询方式 | 图上贪心遍历 | 先选簇再逐条比 |
| 建索引 | 无需训练,边插边建 | 需 k-means 训练码本 |
| 删除支持 | 支持标记删除 | 只能整库重建 |
| 单条内存 | 约 4.2 KB | 约 64 到 256 B |
| 适合规模 | 百万条以内 | 千万级以上 |
| 你的环境 | HNSW 在用 | 未安装 |
内存实算:按你的 1912 条
数据
| HNSW 向量本体 | 7.83 |
|---|---|
| HNSW 邻接表加 id | 0.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 字节。
什么时候 IVF-PQ 才划算
向量条数1912 / max 1000000 条
- 到百万条,float32 要 4.1 GB。
- 同规模 PQ 压到约 64 MB。
- 差两个数量级,省内存才有意义。
- 你的库距这门槛还差 500 倍。
真要省内存,先看别处
RSS 330 MB 里向量只占 8 MB。大头是 Python 运行时、sqlite 缓存和 embedding 请求缓冲。改索引等于拧错螺丝。