瞭解 AlloyDB AI 的自動調整篩選功能

AlloyDB AI 的自動調適篩選功能會在執行查詢時,動態選取最有效率的篩選策略,藉此最佳化篩選向量搜尋。瞭解查詢最佳化工具如何在內嵌篩選和預先篩選之間切換,有助於設計高效能向量查詢,不必手動調整索引。

什麼是自動調整篩選功能?

自動調適篩選功能會在查詢執行期間分析查詢模式和資料分布,動態選擇最有效率的篩選策略,例如內嵌或預先篩選。

AlloyDB AI 查詢最佳化工具會使用以成本為準的分析,判斷在查詢執行期間的任何時間點,內嵌篩選或預先篩選是否能提供最佳效能。

這類最佳化功能支援 AlloyDB AI 的篩選向量搜尋,自動切換向量和中繼資料索引,不需手動介入,就能產生準確結果。

動態切換篩選策略

執行查詢時,自動調整篩選功能會根據即時查詢模式和資料分布,自動動態切換內嵌篩選和預先篩選策略。AlloyDB AI 查詢最佳化工具會使用以成本為準的分析,判斷哪種策略在任何時間點都能提供最佳效能。

從內嵌到預先篩選

如果最佳化工具判斷預先篩選更有效率,自動調適篩選功能會在執行期間,觸發從內嵌篩選切換至預先篩選。查詢計畫會動態變更,以反映這項異動。

舉例來說,如果最佳化工具判斷在查詢的該時間點進行預先篩選作業更有效率,計畫的「執行策略」欄位就會顯示 Bitmap assisted pre-filtering。系統會在查詢執行期間適應實際遇到的資料,因此會發生這種動態變化。

Limit (actual rows=10 loops=1)
  ->  Custom Scan (vector scan) on t1 (actual rows=10 loops=1)
        Execution Strategy: Bitmap assisted pre-filtering
        Order By: (vec_col <=> '[...]'::vector)
        Limit: 10
        ->  Bitmap Index Scan on btree_idx (actual rows=10000 loops=1)
              Index Cond: (int_col <= 100000000)

使用 Execution Strategy: Bitmap assisted pre-filtering 時,會先由獨立的 Bitmap Index Scan 篩選大型資料集。如果這項預先篩選功能有效縮小候選範圍,則最終向量相似度搜尋不會使用向量索引。

從預先篩選到內嵌篩選

如果 AlloyDB AI 查詢最佳化工具判斷內嵌篩選器更適合目前的查詢特徵,自適應篩選器也會動態從預先篩選器切換至內嵌篩選器。

在這種情況下,查詢計畫會動態調整,更直接地處理向量資料,不會在向量掃描前執行明確的預先篩選步驟。這種適應能力有助於在執行期間,資料分布或查詢參數變更時,達到最佳效能。

舉例來說,如果最佳化工具判定內嵌篩選策略對特定查詢更有效率,查詢計畫就會在「Execution Strategy」(執行策略) 欄位中顯示 vector scan。

Limit (actual rows=10 loops=1)
  ->  Custom Scan (vector scan) on t1 (actual rows=10 loops=1)
        Execution Strategy: Bitmap assisted vector Scan on scann_idx
        Order By: (vec_col <=> '[...]'::vector)
        Limit: 10
        Num Requalifications: 0
        Num filtered: 1000
        ->  Bitmap Index Scan on btree_idx (actual rows=10000 loops=1)
              Index Cond: (int_col <= 100000000)

在這個範例中,Execution Strategy 顯示 Bitmap assisted vector Scan on scann_idx,基礎 Bitmap Index Scan 則在 btree_idx。這表示向量搜尋使用點陣圖篩選器,而點陣圖索引掃描會根據 int_col <= 100000000 條件產生該篩選器。接著,Custom Scan (vector scan) 只會處理這個點陣圖識別的資料列,直接將篩選條件整合到向量掃描程序中。

範例:選擇性如何觸發動態切換

系統會根據標準篩選條件的選擇性,決定是否採用適應性篩選。如果篩選條件會排除大量資料,最佳化工具可能會選擇預先篩選。如果篩選器保留了大部分資料,最佳化工具可能會選擇內嵌篩選。

您可以執行相同的查詢,並調整 WHERE 子句的選擇性,即時觀察這項動態切換。

舉例來說,查詢大型零售產品資料表時,您可能只想對特定價格以下的項目執行向量搜尋。

低選擇性

首先,您要搜尋價格低於 $1,000 美元的產品。由於資料庫中幾乎所有產品的價格都低於 $1,000 美元,因此篩選器的選擇性較低。AlloyDB AI 查詢最佳化工具判斷,將幾乎整個資料庫收集到預先篩選的清單中效率不彰,因此會執行內嵌向量掃描。

查看查詢計畫時,您會發現系統動態調整以因應龐大的資料集,並選擇內嵌篩選。

  Limit (actual rows=10)
    -> Custom Scan (vector scan)
    Execution Strategy: Bitmap assisted vector Scan on scann_idx
    Order By: (vec <=> '[...]'::vector)
    -> Bitmap Index Scan
       Index Cond: (price <= 1000)

高選擇性

接著,您將查詢變更為搜尋 $10 美元以下的產品。查詢開始執行時,AlloyDB AI 查詢最佳化工具會先準備使用內嵌篩選。規劃工具誤以為篩選條件不夠精確。這種情況比預期更常發生,因為用來估算這些數據的統計資料不一定準確或最新。不過,系統很快就判斷出價格篩選器的選擇性很高,因為資料庫中價格這麼低的項目很少。最佳化工具判斷,在執行向量掃描前收集這些少數資料列的速度快得多,因此會動態切換策略,改為預先篩選。

查詢計畫會反映這項即時樞紐。系統選擇先預先篩選小型資料集,再掃描向量。

規劃工具的初始選擇

Limit (actual rows=10)
  -> Custom Scan (vector scan)
     Execution Strategy: Bitmap assisted vector Scan on scann_idx
     Order By: (vec <=> '[...]'::vector)
     -> Bitmap Index Scan
        Index Cond: (price <= 10)

實際執行 (自動調整切換)

Limit (actual rows=10)
  -> Custom Scan (vector scan)
     Execution Strategy: Bitmap assisted pre-filtering
     Order By: (vec <=> '[...]'::vector)
     -> Bitmap Index Scan
        Index Cond: (price <= 10)

您不需要重寫應用程式程式碼,也不必在資料分布隨時間變化時,手動更新資料庫索引。AlloyDB AI 會處理每項查詢的轉送邏輯,確保高效能。

後續步驟