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

AlloyDB for PostgreSQL 的 AI 函式智慧批次處理功能,可讓您在執行叫用 AI 模型的 SQL 查詢時,最佳化效能。這項功能提供與陣列型函式相同或更佳的效能,且不需編寫複雜的批次查詢。如要進一步瞭解 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.if 和 ai.rank,prompt 引數必須是資料欄參照,或與資料欄參照串連的字串文字。其他引數則必須是常數。支援的 prompt 引數範例如下:
    • ai.if(r.review)
    • ai.if('Is this true? : ' || r.review)
    • ai.rank(r.review)
    • ai.rank('Rate this review: ' || r.review)
  • 僅支援 WHERE 子句中含有 ai.if,或 ORDER BY 子句中含有 ai.rank 的 SELECT 查詢。
  • 每次掃描資料表只能使用一個 AI 函式。
  • 僅支援預設 Gemini 模型。詳情請參閱「Google 模型」。如要使用其他模型,請將 google_ml_integration.default_llm_model 旗標設為要使用的模型 ID。
  • 這項功能僅適用於支援 gemini-3.5-flash-lite 模型的區域,或您使用 google_ml_integration.default_llm_model 旗標設定的 LLM 模型區域。詳情請參閱「支援的區域」。

後續步驟