Governor Limit小口诀

1.查询一百异步双
2.条数五万插万行
3.增删改查一百五
4.呼出一百就用光
5.请求累计两分整
6.发送邮件可十封
7.内存6兆异步倍
8.运算耗时十秒钟
9.异步升级六十秒
10.整体十分别嫌少
11.子查询使用要慎重
12.SOQL等待两分钟
13.batch可查五千万
14.查不出来也白干

解释:
官方文档
行1: SOQL最多100次,在异步环境200次,比如Batch,Future…
行2: SOQL查询最多返回5万条结果,DML操作最多1万条。
行3: DML操作做多是150次。
行4,5: Callout最多100次,累计等待时间120秒。
行6:无需解释
行7:Heapsize最大6MB,异步环境最大12MB。
行8,9:CPU使用时间最大10秒,异步环境一分钟。这里注意,查询或者HTTP请求不是CPU的运算时间。
行10: 所以是各种时间加一起才是事务消耗的总时间。最大十分钟。
行11: 子查询会额外消耗计算查询次数,累计查询次数等指标。能不用最好别用。
行12: SOQL查询最多等待2分钟,如果2分钟没有返回查询结果则异常。(子查询会增加查询复杂度)
行13,14: Batch的start方法里最多可以返回5千万条查询结果。如果数据太多查询执行超过了两分钟,batch也不会启动。

关于Trigger中的Return

某天,旁边的同事自顾自地嘀咕起来:“如果Trigger里也能用Return该多好啊。。。。”。
我一听这话忍不了啊,使劲儿拍了下他的桌子,“能啊!谁说不能的!”

Trigger中使用Return规则遵从代码块作用域规则。
举个例子,

(注:Return;皆加在Debug Log之前)
如果在位置0写Return;
那么整个Trigger都会被Return跳过去,Debug Log中没有任何输出。
如果在位置1写Return;
那么第一个handler中的内容都会被跳过,Debug Log的输出结果为0,4,5,6。
如果在位置2写Return;
那么第一个handler的第一个方法的内容都会被跳过,Debug Log的输出结果为0,1,3,4,5,6。
同理,如果在位置4写Return;
那么第二个handler被完整跳过,Debug Log的输出结果为0,1,2,3。
通俗的讲,就是从方法级别开始,只影响到花括号范围。

那么有同学肯定会问。虽然代码规范一般不允许一个sObject建多个Trigger。那么万一就是有两个Trigger呢。
然后在其中一个Trigger中使用Return,会影响另一个Trigger执行吗?

答案是:不会。

道理是一样的,把Trigger降级一层,外面再加一层运行环境,那么每个Trigger里的Return就如同Handler里的Return,也只能影响自己而已。

// Update
自从某次Release之后,如果Return; 语句后面还有可执行的语句,保存时会报错,说有unreachable的代码。
如果想做实验,需要使用如下写法

if(true) {
    return;
}