通过搜索优化加速使用标量函数的查询

标量函数为每次调用返回一个值。搜索优化服务可以提高在等式谓词中使用标量函数的查询的性能。标量函数可以是 系统定义的标量函数用户定义的标量 SQL 函数

关于针对使用标量函数的查询的搜索优化支持,以下部分提供更多信息:

为使用标量函数的查询启用搜索优化

除非您为使用标量函数调用的等式谓词中指定的列启用搜索优化,否则查询不会得到改进。要提高对表使用标量函数的查询的性能,请使用 ALTER TABLE ... ADD SEARCH OPTIMIZATION 命令执行以下操作:

  • 启用特定列的搜索优化。

  • 为表的所有列启用搜索优化。

通常,最佳做法是仅针对特定列启用搜索优化。使用 ON EQUALITY 子句指定列。此示例允许对特定列进行搜索优化:

ALTER TABLE mytable ADD SEARCH OPTIMIZATION ON EQUALITY(mycol);
Copy

为所有受支持数据类型(:doc:` 半结构化 </sql-reference/data-types-semistructured>` 和 GEOGRAPHY 除外)指定 EQUALITY:

ALTER TABLE mytable ADD SEARCH OPTIMIZATION;
Copy

有关更多信息,请参阅 启用和禁用搜索优化

支持的数据类型

搜索优化服务可以提高查询的性能,这些查询在使用标量函数调用的等式谓词中使用以下数据类型的列:

  • 定点数的数据类型,包括以下内容:

    • 所有 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');
Copy

在查询的谓词中使用用户定义的标量 SQL 函数

创建用户定义的标量函数:

CREATE OR REPLACE FUNCTION test_scalar_udf(x INTEGER)
RETURNS INTEGER
AS
$$
  SELECT x + POW(2, 3)::INTEGER + 2
$$
;
Copy

此查询在等式谓词中使用 test_scalar_udf 函数。要提高性能,请确保对 EQUALITY 表中的 mycol 列启用了 test_so_scalar_function_udf 搜索方法。

SELECT *
  FROM test_so_scalar_function_udf
  WHERE mycol = test_scalar_udf(15750);
Copy
语言: 中文