SQL クエリを最適化

SQL Report Builder を使用すると、これらのクエリに対して、いつでもクエリを実行および繰り返すことができます。 これは、作成した列やレポートの更新が必要な場合に、更新サイクルの終了を待たずにクエリを変更する必要がある場合に便利です。

クエリを実行する前に、は Commerce Intelligence コストを見積もります。 コストは、クエリの実行に必要な時間とリソースの数を考慮します。 そのコストが高すぎると見なされる場合や、返される行の数が Commerce Intelligence の制限を超える場合、クエリは失敗します。 可能な限り効率的なクエリを記述できるように、Data Warehouse に対してクエリを実行する場合、Adobeでは次の操作をお勧めします。

SELECT の使用またはすべての列の選択

すべての列を選択しても、クエリがタイムリーで簡単に実行されるわけではありません。 SELECT * を使用するクエリは、特にテーブルに多くの列がある場合、実行に非常に時間がかかる場合があります。

このため、Adobeでは、可能な限り SELECT * を使用せず、必要な列のみを含めることをお勧めします。

代わりに…
試してみる

完全外部結合の使用

外部結合では、結合する両方のテーブル全体が選択されるので、クエリの計算コストが増加します。 つまり、クエリの実行に時間がかかり、結果が返されるまで実行制限より長くかかる可能性があるので、クエリが失敗する可能性が高くなります。

このタイプの結合を使用する代わりに、内部結合または左結合部の使用を検討してください。 内部結合は、テーブル間に列による一致がある場合(たとえば、一般的な customers とテーブルの両方に order_id が存在する場合)にのみ結果 orders 返します。 左結合は、左(最初)のテーブルのすべての結果と、右(2 番目)のテーブルの一致する結果を返します。

完全外部結合クエリを書き換える方法を次に示します。

代わりに…
試してみる

これらのクエリは、使用する JOIN のタイプを除き、すべての点で同一です。

複数の結合の使用

クエリには複数の結合を含めることができますが、クエリのコストが上昇する可能性があることに注意してください。 コストのしきい値に達しないようにするために、Adobeでは、可能な限り複数の結合を避けることをお勧めします。

フィルターの使用

可能な限りフィルターを使用します。 WHERE および HAVING 句は、結果をフィルタリングし、本当に必要なデータのみを提供します。

JOIN 句でのフィルタの使用

結合を実行するときにフィルタを使用する場合は、結合の両方のテーブルに必ずフィルタを適用してください。 冗長になっても、これによりクエリの計算コストが削減され、実行時間が短縮されます。

代わりに…
試してみる

演算子の使用

クエリを記述する場合は、可能な限り低コストの演算子の使用を検討してください。 すべてのクエリには計算コストがあり、クエリを構成する関数、演算子、フィルターによって決定されます。 一部の演算子は計算作業が少なくて済み、他の演算子よりもコストが低くなります。

比較演算子(>、<、=など)は最もコストが低く、その後に LIKE が続きます。 最もコストのかかる演算子である ANDPOSIX 演算子に似ています。

EXISTS と IN の使用

EXISTSIN のどちらを使用するかは、返そうとしている結果のタイプによって異なります。 1 つの値のみを対象とする場合は、IN の代わりに EXISTS 句を使用します。 IN は、コンマ区切り値のリストと共に使用され、クエリの計算コストを増加させます。

クエリ IN 実行する場合、システムはまずサブクエリ(IN ステートメント)を処理し、次に IN ステートメントで指定された関係に基づいてクエリ全体を処理する必要があります。 クエリを複数回実行する必要がないので、EXISTS ははるかに効率的です。クエリで指定された関係を確認する際に、true/false 値が返されます。

簡単に言えば、システムは EXISTS を使用するときほど処理する必要はありません。

代わりに…
試してみる

並べ替え順の使用

ORDER BY は SQL の高コストな関数で、クエリのコストを大幅に増やす可能性があります。 クエリの説明コストが高すぎるというエラーメッセージが表示された場合は、必要でない限り、クエリから ORDER BY を削除してみてください。

これは ORDER BY を使用できないとは言わないわけではなく、必要な場合にのみ使用する必要があります。

Group BY と ORDER BY の使用

このアプローチが目的に合わない場合もあります。 GROUP BYORDER BY を使用する場合は、両方の句の列を同じ順序で配置する必要があるという原則があります。 例:

代わりに…
試してみる

まとめ

SQL の書き方を学ぶ(そして効率的に書く)最善の方法は、試行錯誤を通じることです。 最適なレポートを見つけるには、SQL エディターのみを使用して、いくつかのレポートを再作成してみてください。

recommendation-more-help
e1f8a7e8-8cc7-4c99-9697-b1daa1d66dbc