基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
ob_udf_selectivity
更新时间:2026-08-11 17:01:37
说明
该变量从 V5.0.1 版本开始引入。
功能描述
ob_udf_selectivity 用于设置 UDF 等值谓词的默认选择率。
优化器在对包含 UDF 谓词的查询进行代价估算时,会使用该变量作为 UDF 等值谓词(如 udf(col) = 1)的默认选择率,参与谓词重排序(predicate reorder)的计算。用户可以根据 UDF 的实际过滤效果调整该值,以影响优化器对谓词执行顺序的决策。
权限要求
查询变量
Global 级别
sys租户和所有用户租户均可以使用SHOW VARIABLES语句或视图SYS.TENANT_VIRTUAL_GLOBAL_VARIABLE(Oracle 模式)及视图information_schema.GLOBAL_VARIABLES(MySQL 模式)查看 Global 系统变量的值。Session 级别
sys租户和所有用户租户均可以使用SHOW VARIABLES语句或视图SYS.TENANT_VIRTUAL_SESSION_VARIABLE(Oracle 模式)及视图information_schema.SESSION_VARIABLES(MySQL 模式)查看 Session 系统变量的值。
修改变量
Global 生效
sys租户可以直接修改 Global 系统变量的值。MySQL 用户租户需要拥有
SUPER或ALTER SYSTEM权限才能修改 Global 系统变量的值。Oracle 用户租户需要拥有
ALTER SYSTEM权限才能修改 Global 系统变量的值。
Session 生效
sys租户和所有用户租户均可以直接修改本租户的 Session 系统变量的值。
属性说明
| 属性 | 描述 |
|---|---|
| 参数类型 | numeric |
| 默认值 | 0.005 |
| 取值范围 | [0.0, 1.0] |
| 生效范围 |
|
| 是否影响计划 | 是,该变量带有 INFLUENCE_PLAN 标记,变量值变化时会触发计划淘汰。 |
| 是否可修改 | 是,支持通过 SET 或 ALTER SESSION SET 语句修改。 |
使用说明
ob_udf_selectivity 和 ob_udf_cost_factor 共同决定 UDF 谓词在谓词重排序中的 rank 值。优化器的目标是将 rank 更小的谓词排在前面执行:
- rank 计算公式近似为
(selectivity - 1) / cost_factor。 ob_udf_selectivity影响 selectivity 项:值越小表示 UDF 过滤能力越强(保留更少行数),rank 越小,UDF 越倾向于在前面执行。ob_udf_cost_factor影响 cost 项:值越大表示 UDF 单行处理代价越高,rank 越大(越接近 0),UDF 越倾向于在后面执行。
一般情况下使用默认值即可,当对 UDF 的实际过滤能力有明确的预期时,可调整该变量。
配置示例
设置 UDF 等值谓词的选择率为 0.999(Session 级别生效)。
obclient> SET ob_udf_selectivity = 0.999;
设置 UDF 等值谓词的选择率为 0.999(Global 级别生效)。
obclient> SET GLOBAL ob_udf_selectivity = 0.999;