Loading
Salesforce から送信されるメールは、承認済ドメインからのみとなります続きを読む

SOQL クエリの処理速度への考慮事項について

公開日: Nov 28, 2022
説明
SOQL クエリの処理速度への考慮事項について
解決策
  • インデックスを使用した対応
Salesforce では、クエリの処理速度を短縮するために標準インデックス(*1)およびカスタムインデックス(*2) をサポートしています。
  • インデックスの理解
    標準インデックスおよびカスタムインデックスは、付与されている項目のみで以下の検索条件を満たした際に使用されます。
    • [標準インデックス]
      1. 検索条件が合計レコード数の 30% 未満 (*3)
      2. 最大で 1,000,000 件
    • [カスタムインデックス]
      1. 検索条件が合計レコード数の 10% 未満 (*3)
      2. 最大で 333,333 件
    • カスタムインデックスおよび標準インデックスの制限
      • [標準インデックス]
        1. LastModifiedDate を使用したクエリで 等価比較演算子の小なり(<) を使用した場合には、標準インデックスは使用されません。
          • 例:  SOQL> select Id from timeout__c where LastModifiedDate < today
      • [カスタムインデックス]
        • 数式項目は、数式内容でカスタムインデックスの付与を出来ない場合があります。
        • テキスト項目で等価比較演算子を用いた検索の場合はカスタムインデックスは使用されません。
          • 例: SOQL> select Id from CustomObject__c where text__c > '20141101'
        • AND を使用した場合、インデックスのいずれかから返されるレコード数が以下の場合使用されます。
          • オブジェクトのレコード数が100万レコード以内
            • 各項目が返すレコードが 20% (または666,666件)未満  かつ すべての項目で返すレコード数が 10% 以下(または、333,333件) 未満
          • オブジェクトのレコード数が100万レコードより大きい場合
            • 項目が返すレコードが 10% (または666,666件)未満  かつ すべての項目で返すレコード数が 5% 以下(または、333,333件) 未満
        • OR を使用した場合(*4)、すべてのインデックスから返されるレコード数が以下の場合使用されます。​
          • オブジェクトのレコード数が100万レコード以内
            • 項目が返すレコードが 10% (または333,333件)未満 かつ すべての項目で返すレコード数が 10% 以下(または、333,333件) 未満
          • オブジェクトのレコード数が100万レコードより大きい場合
            •  項目が返すレコードが 5% (または333,333件)未満  かつ すべての項目で返すレコード数が 5% 以下(または、333,333件) 未満
        • LIKE を使用した場合、実際のデータのレコードを抽出するサンプリングを行いカスタムインデックスを使用するか決定します。
        • 以下の項目にはカスタムインデックスは付与出来ません。
          • テキスト(暗号化)
          • テキストエリア(リッチ)
          • ロングテキストエリア
          • 複数選択リスト
          • 積み上げ集計
    *1. 標準インデックスは以下項目に標準で作成されています。
    • RecordTypeId
    • Division
    • CreatedDate
    • SystemModStamp(LastModifiedDate)
    • Name
    • Email(取引先責任者とリード)
    • レコードID
    *2. カスタムインデックスを作成するには、外部ID を使用するか salesforce.com カスタマーサポートにお問合せ下さい。
    *3. LIMIT 句で 10% (または333,333件)未満に絞り込みを行ってもカスタムインデックスは使用されません。検索条件のみで返される合計レコード数で考慮する必要があります。
    *4. OR句で連結されるすべての項目にカスタムインデックスが作成されている必要があります。
    • SOQL クエリの書き換え
    • リレーションクエリについて
      • リレーションクエリやリレーションを含む数式項目は大変便利ですが SOQL で多用した場合パフォーマンスへの影響を考慮する必要があります。リレーション項目を減らしパフォーマンスが改善される場合には、項目自動更新などを用い自オブジェクトでリレーション先のデータを保持するなどを検討する必要があります。
    • order by を使用した並び替え
      • order by を使用したソートを行う場合には、内部的に並び替えの処理を行うためパフォーマンスへの影響を考慮する必要があります。特にリレーション項目を指定した際には注意が必要です。
    • LIKE 句を使用したクエリ
      • LIKE を使用している項目に対してのカスタムインデックスの効果について、前方一致を使用している場合においてもパフォーマンスの向上を期待することが出来ない場合があります。LIKEを使用していない項目でカスタムインデックスが有効となるよう検討して下さい。
    • データのライフサイクルについて
    • 大量データの投入
      • Force.com プラットフォームでは、SOQL の実行時にクエリオプティマイザが統計情報を参照しインデックスを使用するなどといった適切なクエリの処理の実施を行っています。クエリオプティマイザが使用する統計情報は適時収集されますが、大量データの投入直後は最適ではないアクセスが行われることがあります。1度の実行で全ての統計情報を収集できない事があります。
    • データのメンテナンス
      • Force.com プラットフォームでは、レコードの削除を行った後ディスクからの削除されるまでには時間差があるため大量データの削除および再投入を繰り返すオペレーションは適していません。Upsert/Update を利用した実装が推奨されます。
    ナレッジ記事番号

    000387331

     
    読み込み中
    Salesforce Help | Article