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 の使用
EXISTS
と IN
のどちらを使用するかは、返そうとしている結果のタイプによって異なります。 1 つの値のみを対象とする場合は、IN
の代わりに EXISTS
句を使用します。 IN
は、コンマ区切り値のリストと共に使用され、クエリの計算コストを増加させます。
クエリ IN
実行する場合、システムはまずサブクエリ(IN
ステートメント)を処理し、次に IN
ステートメントで指定された関係に基づいてクエリ全体を処理する必要があります。 クエリを複数回実行する必要がないので、EXISTS
ははるかに効率的です。クエリで指定された関係を確認する際に、true/false 値が返されます。
簡単に言えば、システムは EXISTS
を使用するときほど処理する必要はありません。
並べ替え順の使用
ORDER BY
は SQL の高コストな関数で、クエリのコストを大幅に増やす可能性があります。 クエリの説明コストが高すぎるというエラーメッセージが表示された場合は、必要でない限り、クエリから ORDER BY
を削除してみてください。
これは ORDER BY
を使用できないとは言わないわけではなく、必要な場合にのみ使用する必要があります。
Group BY と ORDER BY の使用
このアプローチが目的に合わない場合もあります。 GROUP BY
と ORDER BY
を使用する場合は、両方の句の列を同じ順序で配置する必要があるという原則があります。 例:
まとめ
SQL の書き方を学ぶ(そして効率的に書く)最善の方法は、試行錯誤を通じることです。 最適なレポートを見つけるには、SQL エディターのみを使用して、いくつかのレポートを再作成してみてください。