詳細情報:
SQL クエリアクティビティの最適化
SQL クエリ活動は 30 分後にタイムアウトします。SQL クエリ活動を最適化することで、タイムアウトや失敗を回避できます。クエリの実行が一貫して 10 分を超える場合は、Salesforce Customer Data Platform などの別のツールを使用してデータを変換することをお勧めします。
SQL クエリの最適化に使用できるヒント、コツ、一般情報については、次のガイドラインを確認してください。
- 主キー
プライマリキーをデータセットの一意の識別子として使用します。 - 項目の長さとデータ型
取得する項目の長さとデータ型を考慮します。 - データ数量と保持
パフォーマンスを向上させるには、クエリとデータエクステンションのデータ量を制限します。 - 検索可能な引数 (SARGable クエリ)
SARGable クエリとも呼ばれる検索可能な引数は、インデックスを使用できる演算子です。クエリの実行時間を短縮するには、可能な場合は検索可能な引数を使用します。 - 同時活動
同時アクティビティは、複数のプロセスが同じデータに同時にアクセスしようとしたときに発生し、クエリが失敗したり、タイムアウトしたりする可能性があります。たとえば、2 つのプロセスが同じデータセットに同時に書き込みを試行したり、別のプロセスが読み取ろうとするデータセットにプロセスがアクティブに書き込みを行ったりする場合です。 - データステージング
複数の結合を含む大きなクエリを、よりパフォーマンスの高い小さなクエリに分割することで、データをステージングできます。この方法は、タイムアウトになる可能性のある実行時間の長いクエリに特に効果的です。
主キー
プライマリキーをデータセットの一意の識別子として使用します。
- 項目をプライマリキーとして指定する場合は、戦略的に行動します。主キーが多すぎると、一意の識別子の目的が達成されず、パフォーマンスが低下します。
- Automation Studio では、主キー、送信可能なリレーション項目、その他の最も頻繁に使用する項目に自動的にインデックスを付けることで、パフォーマンスが向上します。ただし、インデックス付けを強制するために項目を主キーとして指定する必要はありません。主キーを過度に使用すると、クエリ、API、その他のプロセスからのデータエクステンションへの挿入が遅くなります。
- 複数のデータセットを分析するには、リンクする各データエクステンションで同じ主キー項目を使用します。次に、プライマリキー項目を使用してデータエクステンションを結合します。
項目の長さとデータ型
取得する項目の長さとデータ型を考慮します。
- 項目の長さを定義するときは、必要な文字数に留めてください。たとえば、項目が 2 桁の都道府県コードの場合、列の長さをデフォルトの 50 文字ではなく 2 文字に制限します。
- データ型 nvarchar (max) と varchar (max) は使用しないでください。
- データを保存する場合、少ないほど多くなります。プロセスと特定のテーブルにとって重要なデータのみを保存します。
- 行幅は 4,000 文字以内に制限することをお勧めします。
- 同じデータ型の列のみを結合します。
- ソースデータエクステンションと対象データエクステンションで一致する列に同じデータ型を使用します。
データ数量と保持
パフォーマンスを向上させるには、クエリとデータエクステンションのデータ量を制限します。
- 利用者がすでに作成されているクリーンな構造化データセットを使用する場合は、SQL クエリを使用します。大規模なデータセットを統合してセグメント化する場合は、独自の内部データウェアハウスまたは Salesforce Data 360 などのアプリケーションを使用することをお勧めします。
- データエクステンション間のデータのコピーなどの大きなタスクには SQL クエリを使用しないでください。代わりに、Automation Studio のインポートアクティビティでデータエクステンション抽出を使用します。
- 大量のデータが含まれるデータエクステンションがある場合、外部キーを介して関連する複数のデータエクステンションに分割します。
- 必要なデータのみを照会します。たとえば、24 時間のデータのみが必要な場合、30 日分のデータは取得しないでください。
- 前回のクエリ以降に変更されたデータのみを取得します。たとえば、[更新日] 項目を使用してクエリを制限します。
- 頻繁に変更されるデータを別のデータエクステンションに保存します。このデータを要求したり、データエクステンションを更新したりするときは、他のオートメーションや要求を同時に実行しないでください。
- 以前に複数の列が削除されていたデータエクステンションでパフォーマンスの問題に気付いた場合は、データエクステンションを再構築します。再構築するには、データエクステンションを作成し、クエリアクティビティを使用して古いエクステンションから新しいエクステンションにデータを転送します。
- データ保持設定を使用して、アカウントがデータを保持する期間を指定します。
- クエリを作成するときは、使用事例に合わせて最もパフォーマンスの高いデータの記述方法を選択します。
- 通常、[追加] は、最新のデータのみが必要なイベントログやその他の使用事例に最適です。
- その他のほとんどの使用事例では、[上書き] が最もパフォーマンスの高いオプションです。
- 通常、[更新] は最もパフォーマンスの低いオプションであり、クエリ時間が大幅に長くなる可能性があります。
検索可能な引数 (SARGable クエリ)
SARGable クエリとも呼ばれる検索可能な引数は、インデックスを使用できる演算子です。クエリの実行時間を短縮するには、可能な場合は検索可能な引数を使用します。
- これらの検索できない引数は、
WHERE句で使用しないでください。ORNOT<>NOT EXISTSNOT INNOT LIKE- 列値に対して操作する固有の関数
検索不可能な内在関数のいくつかの例を次に示します。これらは検索可能な引数に書き換えることができます。
検索不可能な引数 検索可能な引数 AND datediff(day, convert(DATE, calculated_subscription_start_dtm), GetDate()) = 26AND calculated_subscription_start_dtm >= DATEADD(DAY, -26, CAST(GETDATE() AS DATE))AND calculated_subscription_start_dtm < DATEADD(DAY, -25, CAST(GETDATE() AS DATE))WHERE convert(DATE, gsl.SendDate) >= convert(DATE, dateadd(dd, - 10, GETUTCDATE()))WHERE gsl.SendDate >= DATEADD(DAY, -10, CAST(GETUTCDATE() AS DATE))AND gsl.SendDate < DATEADD(DAY, -9, CAST(GETUTCDATE() AS DATE)) SELECT DISTINCTは、複数のデータエクステンションに重複データが存在する場合にのみ使用します。SELECT TOPを使用する場合は、予測できない結果を避けるためにORDER BYも使用します。SELECT *を使用する代わりに、名前で列を指定します。SELECT *を使用する場合、クエリアクティビティパーサーはクエリの保存時に存在する列をキャッシュします。今後別の列を追加しても、その列は自動的に追加されません。- SQL Server では大文字と小文字が区別されないため、
LOWER関数は使用しないでください。
同時活動
同時アクティビティは、複数のプロセスが同じデータに同時にアクセスしようとしたときに発生し、クエリが失敗したり、タイムアウトしたりする可能性があります。たとえば、2 つのプロセスが同じデータセットに同時に書き込みを試行したり、別のプロセスが読み取ろうとするデータセットにプロセスがアクティブに書き込みを行ったりする場合です。
- 自動化のステップごとにクエリ活動を 1 つに制限することで、タイムアウトやパフォーマンスの問題を回避します。
- オートメーションを時差配置し、プロセス専用のデータセットを作成することで、同時活動を防止します。
- 自動化の大部分は、1 時間にスケジュールされます。自動化を 8:00 ではなく 8:30 などの他の時間にスケジュールすることで、パフォーマンスを向上させます。
データステージング
複数の結合を含む大きなクエリを、よりパフォーマンスの高い小さなクエリに分割することで、データをステージングできます。この方法は、タイムアウトになる可能性のある実行時間の長いクエリに特に効果的です。
- 複数の小さなクエリを使用して、さまざまなデータエクステンションからデータを収集し、そのデータを保持テーブルに書き込みます。
- すべての小さなクエリが実行されたら、最終クエリを使用して保持テーブルのデータを結合します。
例は、「Use Intermediate Tables to Optimize a Query (中間テーブルを使用したクエリの最適化)」を参照してください。

