我在那里我建立的网站和电子邮件的集合,这样我可以使用这些集合来过滤将被制作成集等其他查询了一批顶尖级的。在设置所有集合的情况下,我想要通过作用域的最后一个循环来执行业务流程。的Salesforce的Apex批次类 - 查询针对大型数据集
样机:
for(Object o : scope)
{
listEmails.add(o.Email);
listWebsites.add(o.Websites);
}
Map<String, Account> accounts = Gather all accounts where website not in :listWebsties; //Website is key
List<String, Contact> contacts = Gather all contacts where email not in :listEmails; //Email is key
for(Object o : scope)
{
Account = accounts.get(o.website);
Contact = contacts.get(o.Email);
Perform business logic here
}
问题是,当我运行这个批处理它保持处理小时。当处理一个相当小的数据库时,这可以正常工作。但是在更大的环境中工作也许这不是最好的解决方案。
谁能帮我用更有效的方法加快批量处理?
运行批次时,您提供的批量大小是多少? 'Id BatchId = Database.executeBatch(Batch,[这是什么数字?]);'另外,你可以发布你的批处理调试日志摘要,它看起来像:'SOQL查询数量:0满分100 \ n查询行数量:50000个中的0个..等等。这些数据有助于确定如何加快速度。 –
我不提供批量大小。我运行的第一个进程的范围只有300个记录。因此,使用300个列表项目的集合来过滤查询的其他对象,例如账户和联系人。这些被查询的其他对象正在大大减缓这一过程。 –
默认批量大小为200,即您在start()方法中查询到的所有内容都被分成200个列表,并且200个项目在任何时候都被传递给作用域。您无法一次处理主要查询中的所有内容,因此我怀疑您可能需要重新编制逻辑来解决此问题。 –