向量索引最佳实践

此页面介绍了可优化向量索引并改进近似最近邻 (ANN) 查询结果的向量索引编制最佳实践。

调整向量搜索选项

向量索引选项的最优值取决于您的使用情形、向量数据集和查询向量。您可以通过创建新的向量索引并在 CREATE VECTOR INDEX 语句中设置 index_option_list 来设置和调整这些值。您可能需要执行迭代调优,才能找到最适合特定工作负载的值。

以下是一些有助于您选择合适值的实用指南:

  • tree_depth(树级别):如果要编制索引的表包含的行数少于 1, 000 万,请使用 tree_depth2 的值。否则,tree_depth3 的表最多支持约 100 亿行。

  • num_leaves:使用数据集中的行数的平方根。值越大,向量索引构建时间就越长。请避免将 num_leaves 设置为大于 table_row_count 除以 1000 的值,因为这会导致叶过小且性能不佳。

  • num_leaves_to_search:此选项用于指定要搜索的索引的叶节点数量。增加 num_leaves_to_search 会提高召回率,但也会增加延迟时间和费用。我们建议将 CREATE VECTOR INDEX 语句中定义的叶总数的 1% 作为 num_leaves_to_search 的值。如果您使用的是过滤条件子句,请增加此值以扩大搜索范围。

如果召回率达到可接受的水平,但查询费用过高,导致最大 QPS 较低,请尝试按照以下步骤增加 num_leaves

  1. num_leaves 设置为其原始值的某个倍数 k(例如 2 * sqrt(table_row_count))。
  2. num_leaves_to_search 设置为其原始值的相同倍数 k。
  3. 尝试减少 num_leaves_to_search,以在保持召回率的同时提高成本和 QPS。

提高召回率

如需提高召回率,请考虑调整 num_leaves_to_search 值或重建向量索引。

如果 num_leaves_to_search 值太小,您可能会发现,要为某些查询向量查找最近邻更具挑战性。创建具有更高 num_leaves_to_search 值的新向量索引有助于通过搜索更多叶子来提高召回率。近期的查询可能包含更多此类具有挑战性的向量。

重建向量索引

向量索引的树结构在创建时会针对数据集进行优化,之后会变为静态。因此,如果在创建初始向量索引后添加了显著不同的向量,则树结构可能不太理想,从而导致召回率不佳。

如需在不中断服务的情况下重建向量索引,请执行以下操作:

  1. 在与当前向量索引相同的嵌入列上创建新的向量索引,并根据需要更新参数(例如 OPTIONS)。
  2. 索引创建完成后,使用 FORCE_INDEX 提示指向新索引,以更新向量搜索查询。这样可确保查询使用新的向量索引。您可能还需要在新查询中重新调整 num_leaves_to_search
  3. 删除过时的向量索引。

后续步骤