MySQL 適用的 Cloud SQL 向量搜尋

本頁說明如何在 MySQL 適用的 Cloud SQL 執行個體上實作向量搜尋。Cloud SQL 可讓您儲存向量嵌入、建立向量索引,以及與其他儲存的資料一併執行向量搜尋

向量嵌入儲存空間

您會將向量嵌入內容儲存在符合完整性、一致性、獨立性和耐用性 (ACID) 屬性的表格中。與資料表中的其他關聯資料一樣,您可以使用現有的交易語意,存取資料表中的向量嵌入。

如要在資料表列和向量表示法之間建立對應關係,您需要在資料表中建立資料欄來儲存向量嵌入。資料欄必須使用 VECTOR 資料類型。向量嵌入資料欄只能儲存使用完全相同維度的向量嵌入,也就是您定義資料欄時指定的維度。儲存向量嵌入內容的資料表列數沒有限制。

如果 Cloud SQL 執行個體有足夠的儲存空間和記憶體,您就可以有多個資料表,各自有自己的向量嵌入資料欄。

資料複製的運作方式與其他 MySQL InnoDB 資料欄相同,適用於向量嵌入資料欄。

如要查看向量嵌入資料表、資料欄和 DML 陳述式的限制,請參閱限制

向量索引

您必須使用向量索引,對向量嵌入執行 ANN 相似度搜尋。Cloud SQL 會使用可擴充的最鄰近項目 (ScANN) 演算法建立向量索引。

向量索引必須符合下列規定:

  • 每個資料表只能建立一個向量索引。
  • 如果執行個體有多個含有向量嵌入的資料表,您可以為每個資料表建立向量索引。
  • 如果您要建立向量索引,就無法在建立索引的資料表主鍵中新增限制。

為提升搜尋品質,請在基礎資料表中載入大量資料後,再建立向量索引。如果基礎資料表中的嵌入內容少於 1000 個,索引建立作業就會失敗。

決定是否要建立向量索引時,如果資料列數量不多,請考慮是否改為執行 KNN 搜尋。決定使用 KNN 或 ANN 搜尋時,也取決於向量嵌入的維度數量。如果嵌入數量較多,可能需要向量索引。

如需向量索引的限制清單,請參閱「限制」。如要瞭解如何建立向量索引,請參閱「建立及管理向量索引」。

向量索引更新

Cloud SQL 會即時更新向量索引。任何對基礎資料表執行資料操縱語言 (DML) 作業的交易,也會將變更傳播至相關聯的向量索引。向量索引的行為與資料表上的任何其他次要索引相同。向量索引完全符合交易一致性,且符合 ACID 標準。如果復原交易,向量索引也會發生相應的復原變更。

複製向量索引

Cloud SQL 會將向量索引複製到所有唯讀備用資源,包括串聯式備用資源。從具有向量嵌入項目的主要執行個體建立新的唯讀備用資源時,唯讀備用資源會繼承主要執行個體的向量嵌入項目設定。如果是現有的唯讀備用資源,則必須在每個資源上啟用向量嵌入支援。

就複製延遲的影響而言,建立及維護向量索引的運作方式與一般 MySQL 索引相同。

持續性、關機和對維護的影響

向量索引的保存方式與基本資料表相同,且完全支援 ACID。向量索引一律會與基本資料表資料同步,並具有相同的可見度、隔離和當機安全性。執行個體關機或維護時,向量索引不會受到影響。

索引維護作業

在基礎資料表上執行大量 DML 作業後,您根據初始資料訓練的向量索引 (建立索引時) 可能無法反映新狀態。這可能會影響搜尋品質。

索引分為兩部分:

  • 索引樹狀結構。這項功能是透過現有資料訓練而成。在索引的生命週期內,這項設定不會變更。
  • 索引葉節點。這些檔案包含所有資料列。索引葉節點永遠不會不同步。

執行大量 DML 陳述式後,資料列會從一個葉節點移至另一個葉節點,導致索引樹狀結構效率降低。如要重新整理索引樹狀結構,必須重建索引。

不支援對含有向量索引的資料表執行 DDL 作業

如果資料表含有向量索引,則不支援下列資料定義語言 (DDL) 作業。

  • 變更需要複製演算法的資料表作業
  • 需要重建資料表的 ALTER TABLE 作業
  • 捨棄或變更主鍵
  • 將表格移至一般表格空間

Cloud SQL 提供向量距離函式,可用於在執行個體上執行近似近鄰 (ANN) 和 K 近鄰 (KNN) 向量相似度搜尋。執行查詢時,系統會將查詢向量與資料集中的向量進行比較。距離函式會使用餘弦等相似度指標,計算向量之間的距離。向量間的距離越短,相似度就越高,並會顯示在搜尋結果中。

執行 ANN 和 KNN 向量搜尋時,Cloud SQL 會使用下列函式測量向量搜尋中向量之間的距離:

  • 餘弦: 測量兩個向量間角度的餘弦值。值越小,表示向量之間的相似度越高。
  • 點積: 計算角度的餘弦值,再乘以對應向量大小的乘積。
  • L2 平方距離: 測量兩個向量之間的歐幾里得距離,方法是將每個維度的平方距離相加。

如需精確結果或想新增選擇性篩選條件,建議使用 KNN 向量搜尋。KNN 搜尋會計算查詢向量與資料集中每個嵌入項目的距離,找出最接近的鄰居。Cloud SQL 中的 KNN 搜尋功能可提供完美的召回率。 KNN 搜尋不會使用向量索引,因此適合處理較小的資料集。

如要執行 KNN 搜尋,請使用 vector_distance 函式,該函式會將兩個向量做為輸入內容:查詢向量 (您要搜尋的內容) 和資料集中的候選向量。並計算這兩個向量之間的距離。 您會在 SELECT 陳述式中使用 vector_distance。詳情請參閱「搜尋 K 近鄰 (KNN)」。

如果發現 KNN 成效不佳,您可以稍後再建構向量索引,並繼續在應用程式中使用 approx_distance 進行 ANN 搜尋。

如果擔心查詢效率,建議使用 ANN 向量搜尋。這項功能會計算查詢向量與資料集中部分向量之間的距離,加快相似度搜尋速度。為此,Cloud SQL 會將資料整理成叢集或分割區,然後將搜尋範圍集中在最接近查詢的叢集。ANN 搜尋需要向量索引。這些索引會優先考量搜尋速度,而非完美召回。在 Cloud SQL 中,TREE_SQ 索引類型用於 ANN 搜尋。

如要執行 ANN 搜尋,請使用 approx_distance 函式和距離測量選項。您可以在 ORDER BYSELECT 清單中使用 approx_distance,並允許 LIMIT 子句限制搜尋結果。您也可以加入 WHERE 子句,對搜尋結果進行事後篩選。如要進一步控管使用篩選器執行 ANN 搜尋時傳回的結果數量,可以採用疊代篩選。透過疊代式篩選,搜尋查詢可以掃描更多向量索引,直到找到偏好的鄰近項目數量為止,進而傳回更多搜尋結果。

您可以為個別用戶端設定工作階段層級的 cloudsql_vector_iterative_filtering 旗標,或為連線至執行個體的所有用戶端設定全域層級的 ON 旗標,啟用搜尋查詢的疊代篩選功能。

詳情請參閱「搜尋近似最近鄰 (ANN)」。

在某些情況下,ANN 搜尋會改用 KNN 搜尋。詳情請參閱「檢查 ANN 搜尋的備援狀態」。

MySQL 適用的 Cloud SQL 版本向量支援差異

MySQL 適用的 Cloud SQL 在 8.0.36 以上版本中,導入了向量搜尋支援功能。從 MySQL 適用的 Cloud SQL 9.7 版開始,Cloud SQL 已修改特定向量搜尋功能,以便與社群開發的向量支援和儲存功能 (MySQL 9.0 版) 整合。

下表比較了 MySQL 適用的 Cloud SQL 版本,說明版本差異如何影響 MySQL 適用的 Cloud 向量搜尋功能。

支援區域 MySQL 8.4 和更早版本適用的 Cloud SQL MySQL 9.7 以上版本適用的 Cloud SQL
啟用向量 如要將向量嵌入內容新增至 MySQL 資料庫並使用向量搜尋功能,您必須將 Cloud SQL 執行個體的 cloudsql_vector 旗標設為 on 如要建立向量索引並執行 ANN 搜尋,請務必將 cloudsql_vector 旗標設為 on
表格中的向量嵌入資料欄 每個資料表只能有一個向量嵌入資料欄。 如果您在資料表上建立索引,則每個資料表只能有一個向量嵌入資料欄。如果未在資料表上建立索引,資料表可以有多個向量嵌入欄。
使用 COMMENTCONSTRAINT 識別向量嵌入資料欄 為區分向量嵌入資料欄和其他資料欄,Cloud SQL 會在資料欄中加入特殊的 COMMENT 註解和 CONSTRAINT 規則。輸入驗證需要限制條件,且向量嵌入欄註解會顯示為註解。您無法修改或刪除註解或限制。 在 MySQL 適用的 Cloud SQL 9.7 中,COMMENT 註解和 CONSTRAINT 規則不再用於識別向量嵌入資料欄。
維度限制 向量嵌入的維度上限為 16,000,沒有預設值。 向量嵌入的維度上限為 16,383,預設為 2,048。
向量儲存格式 VARBINARY 格式 社群儲存格式
宣告 vector 資料類型的語法 VECTOR(VECTOR_DIMENSIONS)
USING VARBINARY
VECTOR(VECTOR_DIMENSIONS)
[USING VARBINARY]
轉換函式差異 vector_to_string 函式的輸出內容會以完整值的形式列印。 vector_to_string 函式的輸出內容會以科學記號表示,這是社群標準。

限制

下列限制適用於所有支援向量的 Cloud SQL 版本:

  • 每個資料表只能有一個向量索引。
  • 向量嵌入資料欄不得為產生的資料欄。
  • 含有向量嵌入資料欄的資料表不支援資料表層級分區。
  • 向量索引不支援使用 BITBINARYVARBINARYJSONBLOBTEXT 資料型別或空間資料的主鍵。複合主鍵也不得包含上述任何類型。
  • 如有向量索引,就無法在基本資料表的主鍵中新增限制。
  • 如果資料表有向量索引,您就無法執行某些 DDL 作業。詳情請參閱不支援對含有向量索引的資料表執行 DDL 作業

向量搜尋查詢有以下限制:

  • approx_distance 函式只能用於 ORDER BYSELECT 清單。
  • 涉及基礎資料表的述詞可與 ORDER BYSELECT 清單中的 approx_distance 運算式合併使用,並用於 WHERE 條件中。WHERE 條件述詞會在評估 approx_distance 向量函式後評估。

後續步驟