クエリのパフォーマンスに関するフィードバックを取得する (ベータ)
Salesforce でクエリ、レポート、またはリストビューがどのように実行されるかについてフィードバックを取得するには、explain パラメータを指定して Query リソースを使用します。Salesforce では、各クエリを分析して、クエリ結果を���得するための最適な手段が検索されます。クエリおよびクエリ条件に応じて、Salesforce ではインデックスまたは内部最適化が使用されます。クエリを実際に実行せずに Salesforce でクエリがどのように最適化されるかについての詳細を返すには、explain パラメータを使用します。応答に基づいて、クエリをセレクティブにするための条件を追加するなど、クエリのパフォーマンスを細かく調整するかどうかを決定できます。
応答には、最も最適なものから順に並び替えられた、1 つ以上のクエリ実行プランが含まれます。クエリ、レポート、またはリストビューの実行時には最も最適なプランが使用されます。
explain を使用するときに返される項目についての詳細は、「Query Options ヘッダー」の explain パラメータを参照してください。クエリをセレクティブにする方法についての詳細は、『Apex 開発者ガイド』の「非常に大きい SOQL クエリの処理」を参照してください。
例: クエリのパフォーマンスに関するフィードバック
次のパフォーマンスフィードバッククエリでは、Merchandise__c を使用します。
1curl https://MyDomainName.my.salesforce.com/services/data/v59.0/query/?explain=
2SELECT+Name+FROM+Merchandise__c+WHERE+CreatedDate+=+TODAY+AND+Price__c+>+10.0パフォーマンスフィードバッククエリのレスポンスボディは、次のようになります。
1{
2 "plans" : [ {
3 "cardinality" : 1,
4 "fields" : [ "CreatedDate" ],
5 "leadingOperationType" : "Index",
6 "notes" : [ {
7 "description" : "Not considering filter for optimization because unindexed",
8 "fields" : [ "IsDeleted" ],
9 "tableEnumOrId" : "Merchandise__c"
10 } ],
11 "relativeCost" : 0.0,
12 "sobjectCardinality" : 3,
13 "sobjectType" : "Merchandise__c"
14 }, {
15 "cardinality" : 1,
16 "fields" : [ ],
17 "leadingOperationType" : "TableScan",
18 "notes" : [ {
19 "description" : "Not considering filter for optimization because unindexed",
20 "fields" : [ "IsDeleted" ],
21 "tableEnumOrId" : "Merchandise__c"
22 } ],
23 "relativeCost" : 0.65,
24 "sobjectCardinality" : 3,
25 "sobjectType" : "Merchandise__c"
26 } ]
27}この応答は、このクエリに対して 2 つの可能な実行プランが Salesforce で検出されたことを示しています。最初のプランでは、このクエリのパフォーマンスを向上するために CreatedDate インデックス項目が使用されます。2 つ目のプランでは、インデックスを使用せずにすべてのレコードがスキャンされます。クエリが実行されると、最初のプランが使用されます。どちらのプランでも、IsDeleted 項目のインデックスが作成されていないため、削除済みとマークされているレコードを除外する場合に使用される 2 つ目の最適化がありません。