検索最適化の有効化と無効化

検索最適化を有効にするには、必要な権限を持つロールを使用し、 ALTER TABLE ... ADD SEARCH OPTIMIZATION コマンドを使用して、テーブル全体または特定の列に対して検索最適化を有効にします。

必要なアクセス制御権限

テーブルの検索最適化を追加、構成、または削除するには、次が必要です。

  • テーブルに対する OWNERSHIP 権限を所有します。

  • テーブルを含むスキーマに対する ADD SEARCH OPTIMIZATION 権限を所有します。この権限を付与するには:

    GRANT ADD SEARCH OPTIMIZATION ON SCHEMA <schema_name> TO ROLE <role>
    
    Copy

クエリに検索最適化サービスを使用するには、テーブルに対する SELECT 権限が必要。

その他の追加の権限は必要ありません。SEARCH OPTIMIZATION はテーブルプロパティであるため、テーブルのクエリ時に自動的に検出され、(適切な場合は)使用されます。

検索最適化の構成

注釈

大きなテーブル(テラバイト(TB)以上のデータを含むテーブル)に検索最適化を追加すると、短期間にクレジット消費量が即座に増加する可能性があります。

テーブルに検索最適化を追加すると、メンテナンスサービスは、すぐにバックグラウンドでテーブルの検索アクセスパスの構築を開始します。テーブルが大きい場合、メンテナンスサービスがこの作業を大規模に並列化する可能性があり、その結果、短期間にコストが増加する可能性があります。

大きなテーブルに検索最適化を追加する前に、 これらのコストの見積もりを取得 して、何が起きるかを把握します。

検索最適化を有効にする場合、テーブル全体またはテーブル内の特定の列に対して有効にするかどうかを選択できます。

  • テーブル全体の検索最適化を有効にすると、対象となるすべての列に対するポイントルックアップクエリが可能になります。

    テーブル全体の検索最適化を有効にするには、 ON 句を使用 せずに ALTER TABLE ... ADD SEARCH OPTIMIZATION コマンドを使用します。

  • 特定の列の検索最適化を有効にすると、クエリであまり使用しない列の検索アクセスパスの作成にクレジットを費やす必要がなくなります。また、列ごとに最適化するクエリの種類を追加選択できるため、パフォーマンスがさらに向上する可能性があります。

    ALTER TABLE ... ADD SEARCH OPTIMIZATION コマンド の ON 句 を使用して、最適化するクエリの種類を指定し、特定の列の検索最適化を有効にします。ADD SEARCH OPTIMIZATION の ON 句で、検索最適化を有効にする列を指定します。特定の列の検索最適化を有効にすると、検索方法も指定できます (たとえば、等価検索と IN 検索の場合は EQUALITY 、 GEOGRAPHY 検索の場合は GEO 、部分文字列検索の場合は SUBSTRING)。同じ列で複数の検索方法を有効にすることができます。

一般的には、特定の列に対してのみ検索最適化を有効にするのがベストプラクティスです。

次のセクションでは、テーブルの検索最適化を構成する方法について説明します。

検索最適化を構成した後、設定が正しいかどうかを検査することができます。

検索最適化が十分な利益をもたらさないことが判明した場合、特定の列またはテーブル全体から検索最適化を削除することができます。

特定の列に対する検索最適化の有効化

特定の列の検索最適化を構成するには、 ALTER TABLE ... ADD SEARCH OPTIMIZATION コマンドを ON 句と合わせて使用します。

注釈

このコマンドを実行しているときは、 テーブルに検索最適化を追加する権限 を持つロールを使用します。

ON 句は、特定の列の検索最適化を構成することを指定します。構文の詳細については、 ALTER TABLE ... ADD SEARCH OPTIMIZATION のセクション をご参照ください。

注釈

テーブル内の該当するすべての列に等価および IN 述語の検索最適化を適用するだけの場合は、 テーブル全体に対する検索最適化の有効化 をご参照ください。

このコマンドを実行すると、 列が検索最適化用に構成されていることを確認できます

次のセクションには、検索最適化の構成を指定する方法を示す例が含まれています。

例: 特定の列に対する等価および IN 述語のサポート

テーブル t1 内の列 c1c2、および c3 の等価述語を使用して検索を最適化するには、次のステートメントを実行します。

ALTER TABLE t1 ADD SEARCH OPTIMIZATION ON EQUALITY(c1, c2, c3);
Copy

ON 句で同じ検索方法を複数回指定することもできます。

-- This statement is equivalent to the previous statement.
ALTER TABLE t1 ADD SEARCH OPTIMIZATION ON EQUALITY(c1), EQUALITY(c2, c3);
Copy

例: 該当するすべての列に対する等価および IN 述部のサポート

テーブル内の該当するすべての列に対して等価述語を使用して検索を最適化するには、次のステートメントを実行します。

ALTER TABLE t1 ADD SEARCH OPTIMIZATION ON EQUALITY(*);
Copy

次の点に注意してください。

例: さまざまなタイプの述語のサポート

c1 および c2 の等価述語による検索と、列 c3 の部分文字列検索を最適化するには、次のステートメントを実行します。

ALTER TABLE t1 ADD SEARCH OPTIMIZATION ON EQUALITY(c1, c2), SUBSTRING(c3);
Copy

例: 同じ列に対する異なる述語のサポート

同じ列、 c1、に対する等号述語と部分文字列述語の両方の検索を最適化するには、以下のステートメントを実行します。

ALTER TABLE t1 ADD SEARCH OPTIMIZATION ON EQUALITY(c1), SUBSTRING(c1);
Copy

例: VARIANT のフィールドに対する等価および IN 述語のサポート

VARIANT 列 c4 のフィールド user にネストされた VARIANT フィールド uuid の等価述語を使用して検索を最適化するには、次のステートメントを実行します。

ALTER TABLE t1 ADD SEARCH OPTIMIZATION ON EQUALITY(c4:user.uuid);
Copy

例: 地理空間関数のサポート

c1 列の GEOGRAPHY オブジェクトで地理空間関数を使用する述語で検索を最適化するには、次のステートメントを実行します。

ALTER TABLE t1 ADD SEARCH OPTIMIZATION ON GEO(c1);
Copy

テーブル全体に対する検索最適化の有効化

サポートされているデータ型 (VARIANT および GEOGRAPHY を除く) のすべての列に EQUALITY を指定する場合は、 ON 句なしで ALTER TABLE ... ADD SEARCH OPTIMIZATION コマンドを使用します。

注釈

このコマンドを実行しているときは、 テーブルに検索最適化を追加する権限 を持つロールを使用します。

例:

alter table test_table add search optimization;
Copy

構文の詳細については、 ALTER TABLE にある検索最適化のセクション をご参照ください。

このコマンドを実行すると、 列が検索最適化用に構成されていることを確認できます

後で追加された列への影響

ON 句なしで ALTER TABLE ... ADD SEARCH OPTIMIZATION コマンドを実行すると、その後テーブルに追加されるすべての列も最適化のために EQUALITY に構成されます。

ただし、同じテーブルで ON 句のある ALTER TABLE ... { ADD | DROP } SEARCH OPTIMIZATION を指定すると、その後テーブルに追加される列は EQUALITY 用に自動では構成されません。これらの新しく追加された列を EQUALITY 用に構成するには、 ALTER TABLE ... ADD SEARCH OPTIMIZATION ON ... を実行する必要があります。

テーブルが検索最適化用に構成されていることの確認

テーブルとその列が検索最適化用に構成されていることを確認するには、

  1. テーブルとその列の 検索最適化構成を表示 します。

  2. SHOW TABLES コマンドを実行して、検索最適化が追加されていることを確認し、テーブルがどの程度最適化されているかを判断します。

    例:

    SHOW TABLES LIKE '%test_table%';
    
    Copy

    このコマンドの出力により、

    • SEARCH_OPTIMIZATION が ON であることを確認します。これは、検索最適化が追加されたことを示しています。

    • SEARCH_OPTIMIZATION_PROGRESS の値を確認します。これは、これまでに最適化されたテーブルの割合を指定します。

      検索最適化が最初にテーブルに追加されたとき、パフォーマンスの利点はすぐには現れません。検索最適化サービスは、バックグラウンドでデータの入力を開始します。メンテナンスがテーブルの現在の状態に追いつくにつれて、利点の増加が明らかになります。

      クエリを実行して検索最適化が機能していることを確認する前に、テーブルが完全に最適化されたことを示すまで待ちます。

  3. クエリを実行して、検索最適化が機能していることを確認します。

    Snowflakeオプティマイザーは、特定のクエリに対して検索最適化サービスをいつ使用するかを自動的に選択することに注意してください。ユーザーは、どのクエリ検索最適化を使用するかについては制御できません。

    検索最適化サービスが最適化するように設計されているクエリを選択します。 検索最適化によるメリットを受け得るクエリの特定 をご参照ください。

  4. ウェブ UI で、このクエリのクエリプランを表示し、クエリノード「検索最適化アクセス」がクエリプランの一部であることを確認します。

テーブルの検索最適化構成の表示

テーブルの検索最適化構成を表示するには、 DESCRIBE SEARCH OPTIMIZATION コマンドを使用します。

たとえば、次のステートメントを実行して、列の検索最適化を構成するとします。

ALTER TABLE t1 ADD SEARCH OPTIMIZATION ON EQUALITY(c1);
Copy

DESCRIBE SEARCH OPTIMIZATION を実行すると、次の出力が生成されます。

DESCRIBE SEARCH OPTIMIZATION ON t1;

+---------------+----------+--------+------------------+--------+
| expression_id |  method  | target | target_data_type | active |
+---------------+----------+--------+------------------+--------+
| 1             | EQUALITY | C1     | NUMBER(38,0)     | true   |
+---------------+----------+--------+------------------+--------+
Copy

特定の列またはテーブル全体からの検索最適化の削除

特定の列に対する検索最適化構成を削除できます。または、テーブル全体から SEARCH OPTIMIZATION プロパティを削除できます。

特定の列に対する検索最適化のドロップ

特定の列の検索最適化構成をドロップするには、 ON 句のある ALTER TABLE ... DROP SEARCH OPTIMIZATION コマンドを使用します。

たとえば、 DESCRIBE SEARCH OPTIMIZATION コマンドを実行すると、次の式が出力されるとします。

DESCRIBE SEARCH OPTIMIZATION ON t1;

+---------------+-----------+-----------+-------------------+--------+
| expression_id |  method   | target    | target_data_type  | active |
+---------------+-----------+-----------+-------------------+--------+
|             1 | EQUALITY  | C1        | NUMBER(38,0)      | true   |
|             2 | EQUALITY  | C2        | VARCHAR(16777216) | true   |
|             3 | EQUALITY  | C4        | NUMBER(38,0)      | true   |
|             4 | EQUALITY  | C5        | VARCHAR(16777216) | true   |
|             5 | EQUALITY  | V1        | VARIANT           | true   |
|             6 | SUBSTRING | C2        | VARCHAR(16777216) | true   |
|             7 | SUBSTRING | C5        | VARCHAR(16777216) | true   |
|             8 | GEO       | G1        | GEOGRAPHY         | true   |
|             9 | EQUALITY  | V1:"key1" | VARIANT           | true   |
|            10 | EQUALITY  | V1:"key2" | VARIANT           | true   |
+---------------+-----------+-----------+-------------------+--------+
Copy

c2 の部分文字列に対する検索最適化をドロップするには、次のステートメントを実行します。

ALTER TABLE t1 DROP SEARCH OPTIMIZATION ON SUBSTRING(c2);
Copy

c5 のすべてのメソッドに対する検索最適化をドロップするには、次のステートメントを実行します。

ALTER TABLE t1 DROP SEARCH OPTIMIZATION ON c5;
Copy

c5 は等価検索と部分文字列検索を最適化するように構成されているため、上記のステートメントは c5 の等価検索と部分文字列検索の構成をドロップします。

c1 の等価性に対する検索最適化をドロップし、式 IDs 6 および 8 で指定された構成をドロップするには、次のステートメントを実行します。

ALTER TABLE t1 DROP SEARCH OPTIMIZATION ON EQUALITY(c1), 6, 8;
Copy

構文の詳細については、 ALTER TABLE ... DROP SEARCH OPTIMIZATION のセクション をご参照ください。

テーブルからの検索最適化の削除

テーブルから SEARCH OPTIMIZATION プロパティを削除するには、

  1. テーブルから検索最適化を削除する権限 があるロールに切り替えます。

  2. ON 句なしで ALTER TABLE ... DROP SEARCH OPTIMIZATION コマンドを実行します。

    ALTER TABLE [IF EXISTS] <table_name> DROP SEARCH OPTIMIZATION;
    
    Copy

    例:

    alter table test_table drop search optimization;
    
    Copy

詳細については、 ALTER TABLE ... DROP SEARCH OPTIMIZATION のセクション をご参照ください。