通过搜索优化加速使用标量函数的查询¶
标量函数为每次调用返回一个值。搜索优化服务可以提高在等式谓词中使用标量函数的查询的性能。标量函数可以是 系统定义的标量函数 或 用户定义的标量 SQL 函数。
关于针对使用标量函数的查询的搜索优化支持,以下部分提供更多信息:
为使用标量函数的查询启用搜索优化¶
除非您为使用标量函数调用的等式谓词中指定的列启用搜索优化,否则查询不会得到改进。要提高对表使用标量函数的查询的性能,请使用 ALTER TABLE ... ADD SEARCH OPTIMIZATION 命令执行以下操作:
启用特定列的搜索优化。
为表的所有列启用搜索优化。
通常,最佳做法是仅针对特定列启用搜索优化。使用 ON EQUALITY 子句指定列。此示例允许对特定列进行搜索优化:
ALTER TABLE mytable ADD SEARCH OPTIMIZATION ON EQUALITY(mycol);
为所有受支持数据类型(:doc:` 半结构化 </sql-reference/data-types-semistructured>` 和 GEOGRAPHY 除外)指定 EQUALITY:
ALTER TABLE mytable ADD SEARCH OPTIMIZATION;
有关更多信息,请参阅 启用和禁用搜索优化。
支持的数据类型¶
搜索优化服务可以提高查询的性能,这些查询在使用标量函数调用的等式谓词中使用以下数据类型的列:
定点数的数据类型,包括以下内容:
所有 INTEGER 数据类型,其小数位数为 0。
定点非整数,其小数位数不为 0(如
NUMBER(10,2)
)。定点数的 转换 </sql-reference/data-type-conversion>`(例如 :code:`NUMBER(30, 2)::NUMBER(30, 5))。
:doc:`/sql-reference/data-types-text`(例如 VARCHAR 和 BINARY)。
:doc:`/sql-reference/data-types-datetime`(例如 DATE、TIME 和 TIMESTAMP)。
涉及其他类型的值(例如 VARIANT、FLOAT、GEOGRAPHY 或 GEOMETRY)的查询不会受益。
使用标量函数的支持查询的示例¶
以下查询使用标量函数,并由搜索优化服务提供支持。
在查询的谓词中使用系统定义的标量函数¶
此查询在等式谓词中使用 SHA2 系统定义的标量函数。要提高性能,请确保对 test_so_scalar_function_system
表中的 mycol
列启用了 EQUALITY 搜索方法。
SELECT *
FROM test_so_scalar_function_system
WHERE mycol = SHA2('Snowflake');
在查询的谓词中使用用户定义的标量 SQL 函数¶
创建用户定义的标量函数:
CREATE OR REPLACE FUNCTION test_scalar_udf(x INTEGER)
RETURNS INTEGER
AS
$$
SELECT x + POW(2, 3)::INTEGER + 2
$$
;
此查询在等式谓词中使用 test_scalar_udf
函数。要提高性能,请确保对 EQUALITY 表中的 mycol
列启用了 test_so_scalar_function_udf
搜索方法。
SELECT *
FROM test_so_scalar_function_udf
WHERE mycol = test_scalar_udf(15750);