LoginSignup
2
1

More than 5 years have passed since last update.

SalesforceトリガでのSOQL対象オブジェクトレコード数制限(20万件)

Posted at

Apexトリガでエラー発生

Apexトリガ内でSOQLを発行しているとき、対象オブジェクトのレコード数が200,000件以上で以下のエラーが発生しました。
System.QueryException: Non-selective query against large object type (more than 200000 rows)

上記は以下の状態のときに発生するようです。

  • 対象オブジェクト上のレコード件数が 200,000 レコード以上
  • SOQL の WHERE 句に使用されている項目に 外部ID / カスタムインデックスが付与されていない
  • 外部ID / カスタムインデックスが付与されていたとしても、インデックスが有効に動作する条件に合致していない

【参考】https://help.salesforce.com/articleView?id=000176875&language=ja&type=1

対応内容

簡単なのは、[設定]→[オブジェクトマネージャ]→[オブジェクト名]→[項目とリレーション]より、項目の編集を実施して「外部 ID」にチェックを入れる方法です。
ですが、項目の性質上外部IDに設定したくない場合があるかと思います。(一意にならないなど)
その場合はSalesforceサポートに以下の内容で問合せを行い、対象の項目にカスタムインデックスを付与してもらいましょう。

a.組織ID
b.対象のSOQL全文
 ※SOQL に変数がふくまれている場合には、具体的な値を記載して下さい。
 例) SELECT Name FROM Account WHERE Test_c = 'TEST'
c.実行ユーザ名(メール形式)
 ※ログイン時に利用するメール形式のユーザ名となります。
d.カスタムインデックスの有効性を確認した後、即時に付与を行って良いか [ はい/いいえ ]
e.対象オブジェクトのAPI名
 ※取引先オブジェクトであればAccountとなります。
f.対象項目のAPI名
 ※項目名が取引先の電話番号だった場合はPhone、カスタム項目にて項目名をTestと指定した場合はTest
_cとなります。

【参考】https://help.salesforce.com/articleView?id=000193930&language=ja&type=1

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1