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

SOQL Error System.QueryException: 大規模なオブジェクト種別に対する非選択的クエリ

公開日: Oct 13, 2022
説明
トリガの実行中にレコード数が 200,000 件を超えるオブジェクトに対して SOQL クエリを実行すると、「System.QueryException: Non-selective query against large object type (more than 100,000 rows) ((100,000 行を超える) 大規模なオブジェクト種別に対する非選択的クエリ)」エラーが発生する可能性があります。
解決策
SOQL クエリの実行中に、クエリ実行を促進するために使用できる選択的検索条件があるかどうかを判断するクエリで使用される検索条件は、Salesforce SOQL クエリオプティマイザによって評価されます。トリガの実行中に選択的検索条件が見つからなかった場合、クエリは「非選択的」とマークされ、参照された QueryException が返されます。

検索条件がインデックス化された項目に基づき、ヒューリスティックにレコードの 10% 未満に一致するとみなされた場合、検索条件は「選択的」として扱われます。

場合によって、SOQL クエリの WHERE 句で使用される項目の外部 ID フラグを有効にすることで簡単に解消できることがあります。たとえば、

SELECT Type FROM Account WHERE Text_Field__c = '<value>'

のクエリでは、Text_Field__c の外部 ID フラグが有効になっていて、クエリオプティマイザでヒューリスティックに <value> がレコードの 10% 未満に一致すると判断された場合、Text_Field__c のインデックスが使用されます。


項目の外部 ID フラグを有効にする手順は、次のとおりです。
1) オブジェクトの項目リストに移動:

1.a) Classic では、[設定] | [作成] | [オブジェクト] | <object name> | [項目] に移動します。
1.b) Lightning Experience では、[設定] | [オブジェクトマネージャ] | <object name> | [項目とリレーション] に移動します。

2) 続いて、項目名の横にある [編集] をクリックし、[外部 ID] チェックボックスをオンにします。

注意: WHERE 句で使用される項目の外部 ID フラグを有効にした後も SOQL クエリが非選択的のままになっている場合は、サポートにケースを登録してさらにサポートを受けてください。サポートでは、カスタムインデックス化の候補があるかどうか、または追加の検索条件を含めるためにクエリを変更する必要があるかどうかを判断します。

その他のリソース:
ナレッジ記事番号

000384950

 
読み込み中
Salesforce Help | Article