検索最適化によるスカラー関数のクエリの高速化

スカラー関数は、各呼び出しに対して単一の値を返します。検索最適化サービスで等式述語のスカラー関数を使用するクエリのパフォーマンスを向上させることができるようになります。スカラー関数は、 システム定義のスカラー関数 または ユーザー定義のスカラーSQL関数 のいずれでも可能です。

以下のセクションでは、スカラー関数を使用するクエリの検索最適化サポートに関する詳細情報を提供します。

スカラー関数を使用したクエリの検索最適化の実現

スカラー関数呼び出しを使用する等式述語で指定される列の検索最適化を有効にしない限り、クエリは改善されません。テーブル上でスカラー関数を使用したクエリのパフォーマンスを向上させるには、 ALTER TABLE ... ADD SEARCH OPTIMIZATION コマンドを使用して以下のようにします。

  • 特定の列の検索最適化を有効にします。

  • テーブルのすべての列の検索最適化を有効にします。

一般的には、特定の列に対してのみ検索最適化を有効にするのがベストプラクティスです。ON EQUALITY 句を使用して列を指定します。この例では、特定の列の検索最適化を可能にしています。

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

(半構造化 データおよび GEOGRAPHY を除く) サポートされているデータ型のすべての列に対して EQUALITY を指定する場合:

ALTER TABLE mytable ADD SEARCH OPTIMIZATION;
Copy

詳細については、 検索最適化の有効化と無効化 をご参照ください。

サポートされているデータ型

検索最適化サービスは、スカラー関数呼び出しを使用する等式述語で以下のデータタイプの列を使用するクエリのパフォーマンスを向上させることができます。

他のタイプの値(例えば、 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 関数を等号述語で使用しています。パフォーマンスを向上させるには、 test_so_scalar_function_udf テーブルの mycol 列で EQUALITY 検索メソッドが有効になっていることを確認してください。

SELECT *
  FROM test_so_scalar_function_udf
  WHERE mycol = test_scalar_udf(15750);
Copy