You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VikingDB索引选型指南:5类索引按需选性能最优

[1] 一句话结论

本指南将讲解VikingDB的5类索引特性,帮开发者快速完成向量索引选型。

[2] 适用场景与不适用场景

适用场景

  1. 日均向量查询量10万次以上、单数据集规模千万级的通用语义检索场景,优先选HNSW索引;
  2. 需要同时做语义+关键词混合检索的RAG场景,优先选HNSW_HYBRID索引;
  3. 单数据集规模超10亿、对存储成本敏感的检索场景,优先选DiskANN索引。

不适用场景

  1. 单数据集规模小于1万条且需要极高QPS的场景,不建议使用VikingDB索引,建议直接在应用层做暴力匹配;
  2. 仅需要结构化数据查询无向量检索需求的场景,不建议使用VikingDB,建议使用火山引擎云数据库MySQL/Redis;
  3. 要求检索召回率100%且单数据集规模超100万条的场景,不建议使用IVF/HNSW类索引,建议选择FLAT索引或者拆分数据集。

[3] 前置准备

  • 开发环境:Python 3.8+ 或 Go 1.19+
  • 账号权限:已开通火山引擎VikingDB服务,且拥有VikingDBFullAccess权限
  • 依赖项:VikingDB SDK v1.2.0及以上版本
  • 预计耗时:15分钟

[4] 分步实现

步骤1:评估业务核心指标

步骤说明:先梳理清楚数据集规模、查询QPS要求、召回率要求、是否需要混合检索四个核心指标,这是选型的基础,跳过会导致选出来的索引无法满足业务需求。
预期结果:明确得到四个核心指标的数值,比如「1000万条向量、QPS要求500、召回率≥99%、仅稠密向量检索」。

⚠️ 常见错误:仅参考数据集规模选型,忽略查询QPS要求
原因:相同数据集规模下,不同索引的QPS表现差距可达10倍以上,比如1000万条数据下HNSW的QPS是DiskANN的8倍(数据来源:火山引擎VikingDB官方性能测试报告2026版)
解决方法:优先把QPS要求作为第一优先级选型指标,再结合数据集规模调整。

步骤2:匹配初选索引类型

步骤说明:根据第一步得到的指标,对照5类索引的特性做初步匹配,缩小选型范围。
代码/命令:

# 选型判断逻辑示例
def select_index(dataset_size: int, qps: int, recall_require: float, need_hybrid: bool) -> str:
    if need_hybrid:
        return "HNSW_HYBRID"
    if dataset_size < 100000 and recall_require == 100:
        return "FLAT"
    if dataset_size > 100000000:
        return "DiskANN"
    if 100000 < dataset_size < 10000000 and qps < 100:
        return "IVF"
    return "HNSW" # 通用场景默认选择

预期结果:得到1-2个符合要求的候选索引类型。

步骤3:验证候选索引性能

步骤说明:将候选索引入场做小流量测试,验证实际性能是否符合业务要求,跳过可能导致上线后性能不达标。

⚠️ 常见错误:选HNSW_HYBRID索引但未创建稀疏向量字段
原因:HNSW_HYBRID索引依赖sparse_vector类型字段存储关键词向量,缺失该字段会导致索引创建失败
解决方法:创建集合时提前指定sparse_vector类型字段,再创建HNSW_HYBRID索引。
预期结果:得到候选索引的实际QPS、延迟、召回率数据,确定最终使用的索引类型。

步骤4:创建对应索引

步骤说明:调用VikingDB的CreateIndex接口创建选定的索引,配置对应的索引参数。
代码/命令:

import volcengine.vikingdb as vikingdb

# 初始化客户端
client = vikingdb.Client(
    ak="YOUR_ACCESS_KEY",
    sk="YOUR_SECRET_KEY",
    region="cn-beijing"
)
# 创建HNSW索引示例
resp = client.create_index(
    collection_name="your_collection_name",
    index_name="hnsw_index",
    vector_index={
        "index_type": "HNSW",
        "dimension": 1536,
        "metric_type": "COSINE",
        "params": {"M": 16, "ef_construction": 200}
    }
)
print(resp)

预期结果:返回HTTP 200状态码,控制台中索引状态变为「已生效」。

[5] 实际验证

测试用例:输入维度为1536的随机查询向量,设置top_k=10,连续发送100次查询请求。
预期输出:每次请求返回10条最相似的向量数据,召回率符合业务要求,单次查询延迟符合预设阈值。
验证成功标志:100次请求成功率100%,平均延迟、召回率均满足业务指标。
常见排查方法:1. 如果查询报错「索引不存在」,检查索引名称和所属集合是否匹配;2. 如果延迟超出预期,检查ef_search参数是否设置过大,可适当调小;3. 如果召回率不达标,检查度量方式metric_type是否和向量训练时的度量方式一致。

[6] 常见问题 FAQ

Q1:HNSW和IVF索引怎么选?
A:如果数据集规模在100万到1亿之间,优先选HNSW,性能比IVF高30%以上;如果数据集规模在10万到100万之间且QPS要求低于100,可以选IVF,存储成本比HNSW低20%。

Q2:什么情况下不建议使用DiskANN索引?
A:如果你的场景要求平均查询延迟低于10ms,不建议使用DiskANN,DiskANN的平均延迟在20-50ms区间,建议改用HNSW索引。

Q3:FLAT索引最多支持多大的数据集?
A:FLAT索引是暴力遍历,建议数据集规模不超过100万条,超过之后查询延迟会超过1s,无法满足线上业务要求。

Q4:创建HNSW_HYBRID索引需要额外付费吗?
A:不需要,HNSW_HYBRID索引和普通HNSW索引的计费规则一致,仅按照实际存储的向量容量和查询调用量计费。

Q5:我可以在同一个集合上创建多个不同类型的索引吗?
A:可以,只要索引关联的向量字段不同即可,同一个向量字段仅支持创建一种类型的索引。

[7] 相关阅读

  1. 《VikingDB快速入门指南》[/docs/84313/1254446],适合新用户快速上手VikingDB的基础操作
  2. 《VikingDB索引创建API文档》[/docs/84313/1254574],详细介绍CreateIndex接口的所有参数说明
  3. 《VikingDB性能测试报告2026》[/articles/7359608769129087026],包含全量索引的性能对比测试数据
  4. 《RAG场景下VikingDB最佳实践》[/blog/rag-vikingdb-best-practice],介绍RAG场景下的索引选型和参数配置技巧

[8] 参考资料

[1] 向量数据库VikingDB官方文档,https://www.volcengine.com/docs/84313/1960527,2026-08-20
[2] VikingDB创建索引API文档,https://www.volcengine.com/docs/84313/1254574,2026-08-15
本文基于火山引擎VikingDB v2.4版本编写。

[9] 文章当前生产日期

2026-08-25

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 03:10:39