Salesforce 同一个SOQL查询在“中花费了很长时间”;VF页面控制器“;在「;开发人员控制台“;

Salesforce 同一个SOQL查询在“中花费了很长时间”;VF页面控制器“;在「;开发人员控制台“;,salesforce,visualforce,soql,Salesforce,Visualforce,Soql,简单的查询,在VF页面控制器中只需1分钟,在开发人员控制台中执行时不到1秒。查询正在搜索的记录超过50000条。为什么查询运行时会有如此巨大的差异 String s = '123456'; List<Registration__c> regs = [select id, name from Registration__c where name =: s or speical_number__c =: s limit 1]; String s='12

简单的查询,在VF页面控制器中只需1分钟,在开发人员控制台中执行时不到1秒。查询正在搜索的记录超过50000条。为什么查询运行时会有如此巨大的差异

String s = '123456';
List<Registration__c> regs = 
    [select id, name 
     from Registration__c 
     where name =: s or speical_number__c =: s limit 1];
String s='123456';
列表注册表=
[选择id、名称]
来自注册中心
其中name=:s或special_number__c=:s limit 1];
以下是调试日志的摘录:

开发人员控制台:

12:22:39.063(63557000)| SOQL_执行| u开始|[2]|聚合:0 |从注册中选择id、名称|其中(名称=:tmpVar1或特定编号| c=:tmpVar2)限制1

12:22:39.263(263582000)| SOQL_EXECUTE|u END |[2]|行数:0

VF页面控制器:

12:17:08.148(3148592000)| SOQL_EXECUTE_BEGIN |[633]|聚合:0 |从注册中选择id、名称|其中(名称=:tmpVar1或特定编号| c=:tmpVar2)限制1


12:18:07.350(62350264000)| SOQL_EXECUTE|u END |[633]|行: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);
}
String s='123456';
List regs=新列表();
对于(注册登记:
[选择id、名称]
来自注册中心
其中name=:s或special\u number\u c=:s
限制1
] ) {
注册添加(注册);
}

特殊号码是外部id的一个很好的候选者吗?我这样问是因为将该字段设置为外部id将保证Salesforce.com将为您的字段创建索引。如果没有索引,查询将进行完整的表扫描。

不知道:/听起来很愚蠢-在相同的环境中?是否有批处理作业/大量使用在后台启动?您可以尝试索引数字列(将其标记为外部id)吗?或者更好—创建一个帮助器文本字段,使用工作流将其填充为
Name+''+文本(特殊编号)
,并尝试在where子句中使用此字段?