クエリのパフォーマンスに関するフィードバックを取得する
Salesforce でクエリ、レポート、またはリストビューがどのように実行されるかについてフィードバックを取得するには、explain パラメータを指定して Query リソースを使用します。Salesforce では、各クエリを分析して、クエリ結果を取得するための最適な手段が検索されます。クエリおよびクエリ条件に応じて、インデックスまたは内部最適化が使用されることがあります。クエリを実際に実行せずに Salesforce でクエリがどのように最適化されるかについての詳細を返すには、explain パラメータを使用します。応答に基づいて、クエリをセレクティブにするための条件を追加するなどの変更を加えることによって、クエリのパフォーマンスを細かく調整するかどうかを決定できます。
応答には、最も最適なものから順に並び替えられた、1 つ以上のクエリ実行プランが含まれます。クエリ、レポート、またはリストビューの実行時には最も最適なプランが使用されます。
explain を使用したときに返される項目についての詳細は、「Query」の「explain パラメータ」を参照してください。クエリをセレクティブにする方法についての詳細は、『Apex 開発者ガイド』の「非常に大きい SOQL クエリの処理」を参照してください。
例
- Merchandise__c を使用するクエリに関するパフォーマンスフィードバックを取得する場合の使用例
-
1/services/data/v38.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 つ目の最適化には使用されません。
例
- レポートに関するパフォーマンスフィードバックを取得する場合の使用例
-
1/services/data/v38.0/query/?explain=00OD0000001hCzMMCU - レポートに関するパフォーマンスフィードバックを取得する場合のレスポンスボディの例
-
1{ 2 "plans" : [ { 3 "cardinality" : 1, 4 "fields" : [ ], 5 "leadingOperationType" : "TableScan", 6 "notes" : [ { 7 "description" : "Not considering filter for optimization because unindexed", 8 "fields" : [ "IsDeleted" ], 9 "tableEnumOrId" : "Merchandise__c" 10 } ], 11 "relativeCost" : 0.65, 12 "sobjectCardinality" : 3, 13 "sobjectType" : "Merchandise__c" 14 } ] 15}この応答は、このレポートのクエリに対して 1 つの可能な実行プランが Salesforce で検出されたことを示しています。このプランでは、インデックスを使用せずにすべてのレコードがスキャンされます。IsDeleted 項目のインデックスが作成されていないため、削除済みとマークされているレコードを除外する場合に使用される 2 つ目の最適化には適用できません。