向量索引编制最佳实践

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

对向量搜索选项进行调优

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

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

  • tree_depth(树级别):如果要编制索引的表包含的行数少于 1000 万,请使用值为 2tree_depth。否则,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. 删除过时的向量索引。

后续步骤