クエリサイトを使用したパフォーマンスの向上

クエリのパフォーマンスに影響を与える条件が存在する場合、Snowflakeはこれらの条件に関する洞察を提供します。各インサイトには、クエリのパフォーマンスがどのように影響を受けるかを説明するメッセージが含まれ、パフォーマンスを向上させるための一般的な推奨が提供されます。

これらのインサイトには、:doc:` または QUERY_INSIGHTS ビュー </sql-reference/account-usage/query_insights>` クエリでアクセスできます。

次のセクションでは、クエリのインサイトについて詳しく説明します。

インサイトタイプのリスト

:doc:` この QUERY_INSIGHTS ビューは、</sql-reference/account-usage/query_insights>` 以下を含む洞察を提供します。

  • 検出された条件と、その条件がクエリのパフォーマンスにどのように影響するかについてのメッセージ。

  • 条件を生成したクエリの部分に関する詳細。

  • 条件がパフォーマンスに悪影響を与える場合は、条件に対処するために次のステップを提案します。

以下のテーブルは、インサイトのタイプを ID タイプ別に示したものです。

タイプ ID

インサイト

QUERY_INSIGHT_NO_FILTER_ON_TOP_OF_TABLE_SCAN

テーブルスキャンにフィルターがありません

QUERY_INSIGHT_INAPPLICABLE_FILTER_ON_TABLE_SCAN

フィルターは適用されません

QUERY_INSIGHT_UNSELECTIVE_FILTER

フィルターは選択的ではありません

QUERY_INSIGHT_FILTER_WITH_CLUSTERING_KEY

フィルターはクラスタリングキーを使用します

QUERY_INSIGHT_SEARCH_OPTIMIZATION_USED

クエリは検索最適化によって改善されました

QUERY_INSIGHT_JOIN_WITH_NO_JOIN_CONDITION

結合条件なしで結合する

QUERY_INSIGHT_NESTED_EXPLODING_JOIN

明示的結合(ネストされた結合)

QUERY_INSIGHT_EXPLODING_JOIN

爆発結合(ネストされていない)

QUERY_INSIGHT_REMOTE_SPILLAGE

リモートスピル

テーブルスキャンにフィルターがありません

クエリまたはサブクエリには WHERE 句がありません。これは、クエリがテーブル全体をスキャンし、意図したものよりも多くの行を返す可能性があることを意味します。

パフォーマンスを向上させるには、WHERE 句を追加してスキャンされるデータの量を削減します。

フィルターは適用されません

WHERE 句は行をフィルターで除外しません。つまり、クエリは意図した以上に多くのデータをスキャンする可能性があります。

パフォーマンスを向上させるには、WHERE 句により選択的な条件を追加、または既存の条件をより選択的にします。

フィルターは選択的ではありません

WHERE 句は、行数を大幅に減らすことはありません。つまり、クエリが意図した以上のデータをスキャンする可能性があります。

フィルターは適用されません インサイトとは異なり 、このインサイトは WHERE 句は一部の行を除外していますが、より選択的である可能性があります。

パフォーマンスを向上させるには、WHERE 句により選択的な条件を追加、または既存の条件をより選択的にします。

フィルターはクラスタリングキーを使用します

このクエリは、テーブル </user-guide/tables-clustering-keys>` の :doc:`クラスタリングキーでフィルタリングすることにより性能が向上します。

クエリは検索最適化によって改善されました

クエリは、検索最適化 用に構成された列でフィルタリングしたことで、性能が向上しました。

結合条件なしで結合する

結合に結合条件がありません。結果は :ref:`クロス結合 <label-querying_join_cross>`です。これは、すべての可能な行の組み合わせを返します。

この結合によって生成される行数を減らすには、1つ以上の結合条件を指定します。

明示的結合(ネストされた結合)

少なくとも1つの他の結合の出力を含む結合は <label-exploding_join>` テーブルよりも多くの:ref:`が結合されている行を返しています。 これは、子結合の結合条件に問題があることを示している可能性があります。

結合が結合テーブルに含まれる行よりも多くの行を生成しないようにするには、子結合の結合条件を追加または変更します。さらに、子結合で使用されるサブクエリに WHERE 句を追加すると、返される行数が減少する可能性があります。

爆発結合(ネストされていない)

2つのデータセット(例: テーブル、ビュー、またはテーブル関数呼び出しからの出力)の結合は :ref:`が含まれる結合テーブルよりも多くの行を返す。 <label-exploding_join>`これは、結合条件に問題があることを示している可能性があります。

結合によって、結合されるテーブルで よりも多くの行が生成されないようにするには、結合条件を追加または変更します。さらに、この結合で使用されるサブクエリに WHERE 句を追加すると、返される行数が減少する可能性があります。

リモートスピル

このクエリは、ウェアハウスの保存容量よりも多くのデータをスキャンしました。その結果、ウェアハウスは :ref:` がデータ <label-spillage>` をストレージにスピルするため、クエリの処理が遅くなります。

この問題を防ぐには、より大きな容量を持つ大規模なウェアハウスを使用します。より大きなウェアハウスを使用できない場合は、クエリを変更してより小さなバッチでデータを処理します。

制限事項

  • インサイトはデータベースに対して実行される SQL クエリから生成され、ウェアハウスによって処理される。

  • インサイトは以下に対して作成されません。

    • セキュリティオブジェクトを含むクエリ。

    • ハイブリッドテーブル(Unistore)に対して実行されたクエリ。

    • Native Appsによって生成されたクエリ。

    • EXPLAIN クエリ。

    • 結果を再利用するクエリ