クエリサイトを使用したパフォーマンスの向上¶
クエリのパフォーマンスに影響を与える条件が存在する場合、Snowflakeはこれらの条件に関する洞察を提供します。各インサイトには、クエリのパフォーマンスがどのように影響を受けるかを説明するメッセージが含まれ、パフォーマンスを向上させるための一般的な推奨が提供されます。
これらのインサイトには、|sf-web-interface|で、または:doc:`QUERY_INSIGHTSビュー</sql-reference/account-usage/query_insights>`をクエリすることでアクセスできます。
次のセクションでは、クエリのインサイトについて詳しく説明します。
インサイトタイプのリスト¶
Query Insights ペインと QUERY_INSIGHTSビュー は、以下のような洞察を提供します。
検出された条件と、その条件がクエリのパフォーマンスにどのように影響するかについてのメッセージ。
条件を生成したクエリの部分に関する詳細。
条件がパフォーマンスに悪影響を与える場合は、条件に対処するために次のステップを提案します。
以下のテーブルは、インサイトのタイプを ID タイプ別に示したものです。
タイプ ID |
インサイト |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
テーブルスキャンにフィルターがありません¶
クエリまたはサブクエリには WHERE 句がありません。これは、クエリがテーブル全体をスキャンし、意図したものよりも多くの行を返す可能性があることを意味します。
パフォーマンスを向上させるには、WHERE 句を追加してスキャンされるデータの量を削減します。
フィルターは適用されません¶
WHERE 句は行をフィルターで除外しません。つまり、クエリは意図した以上に多くのデータをスキャンする可能性があります。
パフォーマンスを向上させるには、WHERE 句により選択的な条件を追加、または既存の条件をより選択的にします。
フィルターは選択的ではありません¶
WHERE 句は、行数を大幅に減らすことはありません。つまり、クエリが意図した以上のデータをスキャンする可能性があります。
フィルターは適用されません インサイトとは異なり 、このインサイトは WHERE 句は一部の行を除外していますが、より選択的である可能性があります。
パフォーマンスを向上させるには、WHERE 句により選択的な条件を追加、または既存の条件をより選択的にします。
先頭にワイルドカードが付いた LIKE フィルター¶
クエリでは、ワイルドカード文字で始まる LIKE フィルターを使用します。ワイルドカードで始まるパターンを指定すると、大量のデータをスキャンする可能性があります。
スキャンされるデータの量を減らすために、可能であればワイルドカードで始まらないパターンを指定します。ワイルドカードで始まるパターンを指定する必要がある場合は、より効率的なパターンマッチングのために 検索最適化 の有効化を検討してください。
フィルターはクラスタリングキーを使用します¶
このクエリは、テーブル </user-guide/tables-clustering-keys>` の :doc:`クラスタリングキーでフィルタリングすることにより性能が向上します。
クエリは検索最適化によって改善されました¶
クエリは、検索最適化 用に構成された列でフィルタリングしたことで、性能が向上しました。
クエリはSnowflake Optimaによって改善されました¶
クエリは Snowflake Optima によって改善されました。
クエリは検索最適化とSnowflake Optimaによって改善されました¶
このクエリは、 検索最適化 と Snowflake Optima によって改善されました。
結合条件なしで結合する¶
結合に結合条件がありません。結果は :ref:`クロス結合 <label-querying_join_cross>`です。これは、すべての可能な行の組み合わせを返します。
この結合によって生成される行数を減らすには、1つ以上の結合条件を指定します。
非効率な結合条件で結合する¶
この結合には、データセットが結合された後に評価される複雑な結合条件が含まれています。これは、データセットが結合される前に条件が評価された場合よりも効率が低く、結合が処理する必要があるデータの量が削減されます。
このクエリを高速化するには、結合条件を単純化します。
明示的結合(ネストされた結合)¶
少なくとも1つの他の結合の出力を含む結合は <label-exploding_join>` テーブルよりも多くの:ref:`が結合されている行を返しています。これは、子結合の結合条件に問題があることを示している可能性があります。
結合が結合テーブルに含まれる行よりも多くの行を生成しないようにするには、子結合の結合条件を追加または変更します。さらに、子結合で使用されるサブクエリに WHERE 句を追加すると、返される行数が減少する可能性があります。
爆発結合(ネストされていない)¶
2つのデータセット(例: テーブル、ビュー、またはテーブル関数呼び出しからの出力)の結合は :ref:`が含まれる結合テーブルよりも多くの行を返す。<label-exploding_join>`これは、結合条件に問題があることを示している可能性があります。
結合によって、結合されるテーブルで よりも多くの行が生成されないようにするには、結合条件を追加または変更します。さらに、この結合で使用されるサブクエリに WHERE 句を追加すると、返される行数が減少する可能性があります。
不必要な集約¶
DISTINCT句または GROUP BY句を指定すると、 DISTINCT句または GROUP BY句を指定しないステートメントと同じ行数が生成されます。句を指定することで、結果には影響しない追加の処理ステップが導入されます。
パフォーマンスを向上させるには、不要な DISTINCTまたは GROUP BY句を削除します。
不要な UNION [DISTINCT ] 句¶
入力セットは不連続なので、 UNION [DISTINCT ] 句は必要ありません。
パフォーマンスを向上させるには、 UNION [DISTINCT ] ではなく、 UNION ALLを使います。
リモートスピル¶
このクエリは、ウェアハウスの保存容量よりも多くのデータをスキャンしました。その結果、ウェアハウスは :ref:` がデータ <label-spillage>` をストレージにスピルするため、クエリの処理が遅くなります。
この問題を防ぐには、より大きな容量を持つ大規模なウェアハウスを使用します。より大きなウェアハウスを使用できない場合は、クエリを変更してより小さなバッチでデータを処理します。
クエリがウェアハウスのキューに長時間入っていました¶
このクエリは、 ウェアハウスのキューでの待機時間が 長すぎます。
この問題を回避するには、より容量の大きいウェアハウスを使用するか、同時クエリがより少ないウェアハウスを使用します。
|sf-web-interface|でのクエリサイトの表示¶
:ui:`Query History`の:ref:`クエリプロファイル<label-snowsight_specific_query_details>`タブで、クエリのインサイトを表示することができます。対応するインサイトを持つノードが強調表示されます。
右側の:ui:`Query Insights`ペインには、このクエリで検出された各インサイトのタイプが表示され、クエリで検出されたそのインサイトタイプの各インスタンスが一覧表示されます。検出された条件の詳細については、:ui:`Query Insights`ペインのエントリの横にある:ui:`View`を選択します。
詳細には、クエリのパフォーマンスを向上させるために実行する推奨される次のステップが含まれます。:ui:`Learn more`を選択して、このインサイトの詳細情報を表示できます。
制限事項¶
インサイトはデータベースに対して実行される SQL クエリから生成され、ウェアハウスによって処理される。
Snowflakeは クエリアクセラレーションサービス によって高速化されるクエリについて、 「フィルターが選択的ではない」インサイト を生成しません。
インサイトは以下に対して作成されません。
クエリプランの終了までに複数の手順が必要なクエリ。
セキュリティオブジェクトを含むクエリ。
ハイブリッドテーブル(Unistore)に対して実行されたクエリ。
Native Appsによって生成されたクエリ。
EXPLAIN クエリ。
インタラクティブテーブル で実行されているクエリ。