加快含 AI 函式的查詢執行速度

使用 AI 函式執行查詢時,您可以透過 AI 函式的智慧批次處理功能提升效能。與以陣列為基礎的函式相比,這個函式可提供相同或更佳的效能,且您不必編寫複雜的查詢。如要進一步瞭解 AI 函式,請參閱 AI 函式總覽

智慧批次處理支援下列 AI 函式:

  • ai.if:智慧批次處理僅適用於函式位於 WHERE 子句中的 SELECT 查詢。每次掃描支援單一 ai.if 函式,並可搭配循序、索引和點陣圖堆積掃描使用。如果查詢包含多個資料表掃描 (例如在不同資料表、關係或一般資料表運算式 (CTE) 上),則每個掃描可加速一個 ai.if 函式。
  • ai.rank:智慧批次處理僅適用於函式位於 ORDER BY 子句中的 SELECT 查詢。每次掃描僅支援單一 ai.rank 函式。如果查詢包含多個資料表掃描 (例如在不同資料表、關係或 CTE 上),則每次掃描可加速一個 ai.rank 函式。

為 AI 函式啟用智慧批次處理

如要為 AI 函式啟用智慧批次處理功能,請將 google_ml_integration.enable_ai_function_acceleration 旗標設為 on。這項旗標預設為停用,可控管查詢執行者是否可將符合資格的 AI 作業卸載至 AI 函式套用節點,以加快速度。如果未設定或設為 off,所有查詢作業都會由標準 PostgreSQL 執行程式執行。

您可以在工作階段或執行個體層級設定這個旗標。

如要在執行個體層級為 AI 函式啟用智慧批次處理,請使用 gcloud alloydb instances update 指令:

gcloud alloydb instances update INSTANCE_ID \
  --database-flags google_ml_integration.enable_ai_function_acceleration=on \
  --region=REGION_ID \
  --cluster=CLUSTER_ID \
  --project=PROJECT_ID

更改下列內容:

  • INSTANCE_ID:要更新的執行個體 ID。
  • REGION_ID:叢集所在的區域 ID。詳情請參閱「支援的區域」。
  • CLUSTER_ID:叢集 ID。
  • PROJECT_ID:專案 ID。

如要進一步瞭解如何設定執行個體層級的旗標,請參閱「設定資料庫旗標」。

驗證 AI 函式的智慧批次處理

如要確認 AI 函式的智慧批次處理功能是否已啟用,可以使用 EXPLAIN 陳述式分析查詢。

驗證 ai.if 查詢的 AI 函式智慧批次處理

以下範例說明如何為目前的工作階段啟用 AI 函式的智慧批次處理,並使用 ai.if 函式執行查詢:

SET google_ml_integration.enable_ai_function_acceleration = on;

EXPLAIN (COSTS OFF) SELECT r.name
FROM restaurant_reviews r
WHERE ai.if('Is the following a positive review? Review: '||r.review) AND r.city = 'Los Angeles'
GROUP BY r.name
HAVING count(*) > 20
ORDER BY r.name;

使用 EXPLAIN 陳述式分析查詢時,查詢計畫會顯示 AI Function Apply 節點:

                                       QUERY PLAN                                       
----------------------------------------------------------------------------------------
 GroupAggregate
   Group Key: name
   Filter: (count(*) > 20)
   ->  Sort
         Sort Key: name
         ->  AI Function Apply
               Filter: ai.if((('Is the following a positive review? Review: '::text || review)), NULL::character varying)
               ->  Index Scan using idx_restaurant_reviews_city on restaurant_reviews r
                     Index Cond: ((city)::text = 'Los Angeles'::text)

驗證 ai.rank 查詢的 AI 函式智慧批次處理

以下範例說明如何為目前的工作階段啟用 AI 函式的智慧批次處理,並使用 ai.rank 函式執行查詢:

SET google_ml_integration.enable_ai_function_acceleration = on;

EXPLAIN (COSTS OFF) SELECT r.name, r.review
FROM restaurant_reviews r
WHERE r.city = 'Los Angeles'
ORDER BY ai.rank('Rank these reviews based on how much they emphasize high-quality ingredients. Review: ' || r.review) DESC
LIMIT 50;

使用 EXPLAIN 陳述式分析查詢時,查詢計畫會顯示 AI Function Apply 節點:

                                       QUERY PLAN                                       
----------------------------------------------------------------------------------------
 Limit
  ->  Sort
        Sort Key: (ai.rank(('Rank these reviews based on how much they emphasize high-quality ingredients. Review: ' || r.review'), NULL)) DESC
        ->  AI Function Apply
              ->  Bitmap Heap Scan on restaurant_reviews r
                    Recheck Cond: (city = 'Los Angeles')
                    ->  Bitmap Index Scan on idx_restaurant_reviews_city
                          Index Cond: (city = 'Los Angeles')

查詢計畫中的 AIFunctionApply 節點表示查詢使用了 AI 函式的智慧批次處理功能。如果沒有這個節點,表示查詢使用標準 PostgreSQL 執行。

限制

  • 系統僅支援函式的基本引數。如果是 ai.ifai.rankprompt 引數必須是資料欄參照,或是與資料欄參照串連的字串常值。其他引數必須是常數。 支援的 prompt 引數範例如下:
    • ai.if(r.review)
    • ai.if('Is this true? : ' || r.review)
    • ai.rank(r.review)
    • ai.rank('Rate this review: ' || r.review)
  • 系統僅支援 SELECT 查詢,且 WHERE 子句中含有 ai.if,或 ORDER BY 子句中含有 ai.rank
  • 每次掃描表格只能使用一個 AI 函式。
  • 系統僅支援預設的 Gemini 模型。詳情請參閱「Gemini 模型」。如要使用其他模型,請將 google_ml_integration.default_llm_model 旗標設為要使用的模型 ID。
  • 這項功能僅適用於支援 gemini-2.5-flash-lite 模型或您使用 google_ml_integration.default_llm_model 旗標設定的 LLM 模型區域。詳情請參閱「支援的區域」。

後續步驟