建立:

假设我创建并创建了五个Contact sObject。一次插入一个联系人时,您会通过触发器及其使用的东西进行x个soql查询。

问题:


因此,如果您一次在代码中插入每个联系人,则会得到5个soql查询(对吗?)。
现在说您将这5个人放入一个数组中,并使用一个插入插入该数组。有多少个soql查询?
关于2,如果是5倍,我们为什么要打扰?因此,我们可以将DML的数量减少4个?


谢谢,

半新人

最佳答案

给定代码块和由于该代码块而执行的所有同步顶点代码在单个执行上下文中进行评估,这意味着它具有一组单独的调控器限制。在您给出的示例中,假设您的Contact触发器进行了3个SOQL查询和1个DML语句。如果分别插入每个联系人,则将对每个触发器使用5个DML语句(每个Contact插入一个)+ 1个DML语句,对每个触发器使用3 * 5个SOQL语句,从而导致总共15个SOQL语句和10个DML您的代码的语句。但是,如果将它们作为列表插入,那么所有五个记录都将作为列表发送到触发器(1个DML语句),然后触发器将执行其3个SOQL查询和1个DML语句一次,总共3个SOQL查询和2个DML语句。

这里的关键是设计触发器(以及大多数其他代码),以便查询和语句的数量不依赖于您要处理的记录的数量。 Salesforce在此提供了一个简短的指南:http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_triggers_bulk_idioms.htm

10-07 15:24