利用 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 模型的区域中提供。如需了解详情,请参阅支持的区域

后续步骤