2

単純なクエリ。VF ページ コントローラーで 1 分、開発者コンソールで実行すると 1 秒未満です。クエリが検索している 50,000 を超えるレコードがあります。クエリの実行時間にこのような劇的な違いがあるのはなぜですか?

String s = '123456';
List<Registration__c> regs = 
    [select id, name 
     from Registration__c 
     where name =: s or speical_number__c =: s limit 1];

以下は、デバッグ ログからの抜粋です。

開発者コンソール:

12:22:39.063 (63557000)|SOQL_EXECUTE_BEGIN|[2]|Aggregations:0|Registration__c から ID、名前を選択します where (name = :tmpVar1 or speical_number__c = :tmpVar2) limit 1

12:22:39.263 (263582000)|SOQL_EXECUTE_END|[2]|行:0

VF ページ コントローラー:

12:17:08.148 (3148592000)|SOQL_EXECUTE_BEGIN|[633]|Aggregations:0|Registration__c から ID、名前を選択します where (name = :tmpVar1 or speical_number__c = :tmpVar2) limit 1

12:18:07.350 (62350264000)|SOQL_EXECUTE_END|[633]|行:0

4

1 に答える 1

0

これは、VF/Apex バッチアップの応答方法に関係していると思われます。ただし、制限 1 は、そうではないことを示しているように思われます。しかし、キックのために...これを試してください...

String s = '123456';
List<Registration__c> regs = new List<Registration__c>();
for ( Registration__c reg : 
    [select id, name 
     from Registration__c 
     where name =: s or speical_number__c =: s 
     limit 1
    ] ) {
   regs.add(reg);
}

speical_number__c は外部 ID の適切な候補ですか? そのフィールドを外部 ID に設定すると、Salesforce.com がフィールドのインデックスを作成することが保証されるためです。インデックスがない場合、クエリはテーブル全体のスキャンを実行します。

于 2013-02-13T00:54:51.250 に答える