本頁說明向量索引的最佳做法,可最佳化向量索引,並改善近似近鄰 (ANN) 查詢結果。
調整向量搜尋選項
向量索引選項的最佳值取決於您的用途、向量資料集和查詢向量。您可以建立新的向量索引,並在 CREATE VECTOR INDEX
陳述式中設定 index_option_list
,藉此設定及調整這些值。您可能需要執行疊代式微調,找出特定工作負載的最佳值。
以下是選取適當值時可參考的實用準則:
tree_depth
(樹狀結構層級):如果建立索引的資料表少於 1 千萬列,請使用tree_depth
的2
。否則,tree_depth
的3
最多支援約 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
的值。如果您使用篩選子句,請增加這個值來擴大搜尋範圍。
如果已達到可接受的召回率,但查詢費用過高,導致最高每秒查詢次數偏低,請按照下列步驟增加 num_leaves
:
- 將
num_leaves
設為原始值的某個倍數 k (例如2 * sqrt(table_row_count)
)。 - 將
num_leaves_to_search
設為原始值的相同倍數 k。 - 實驗減少
num_leaves_to_search
,以改善費用和每秒查詢次數,同時維持召回率。
提高召回率
如要提高召回率,請考慮調整 num_leaves_to_search
值或重建向量索引。
調高 num_leaves_to_search
值
如果 num_leaves_to_search
值太小,您可能會發現某些查詢向量的最近鄰難以尋找。建立新的向量索引並提高 num_leaves_to_search
值,有助於搜尋更多葉節點,進而提升召回率。最近的查詢可能包含更多這類難以處理的向量。
重建向量索引
向量索引的樹狀結構會在建立時針對資料集進行最佳化,之後會維持不變。因此,如果在建立初始向量索引後加入差異極大的向量,樹狀結構可能會不夠理想,導致回想率較差。
如要在不停機的情況下重建向量索引,請按照下列步驟操作:
- 在與目前向量索引相同的嵌入資料欄上建立新的向量索引,並視需要更新參數 (例如
OPTIONS
)。 - 索引建立完成後,請使用
FORCE_INDEX
提示指向新索引,以更新向量搜尋查詢。確保查詢使用新的向量索引。您可能也需要在新查詢中重新調整num_leaves_to_search
。 - 捨棄過時的向量索引。
後續步驟
進一步瞭解 Spanner 向量索引。
進一步瞭解 Spanner 近似最近鄰。
進一步瞭解 GoogleSQL
APPROXIMATE_COSINE_DISTANCE()
、APPROXIMATE_EUCLIDEAN_DISTANCE()
、APPROXIMATE_DOT_PRODUCT()
函式。進一步瞭解 GoogleSQL
VECTOR INDEX
陳述式。