model子句也有自己的性能问题。model子句的关键性能问题是出现在rules中的各种规则的求解。根据rules的复杂度,执行顺序,多个规则的依赖关系。model子句会产生不同的执行计划,而这些执行计划就是model子句调优的关键。
概述:
model子句执行计划有如下五种,cyclic,acyclic,ordered以及acyclic fast和ordered fast。
没有绝对的优劣但是如果在同样的业务场景下ordered fast 优于ordered;acyclic fast 优于acyclic优于cyclic
使用rules automatic order子句就会产生cyclic,acyclic或者acyclic order执行计划。例子是偷来的。
rule中存在不明确的执行顺序就会产生cyclic执行计划意味着在实际执行中可能存在循环。
由于rule中没有指定year和week的计算顺序,所以可能存在循环依赖,从而选择了cyclic
明确通过order by 指定了计算顺序,就会选择acyclic。
如果规则仅仅对访问某一个单元格,规则简单就会使用acyclic fast。
rules还有一个执行顺序选项是sequential order。这个是某人的rules执行顺序,如果选择这个就要安排好多个rule的先后顺序。使用这个选项就会产生ordered或者ordered fast执行计划。
规则教复杂就会选用ordered
如果是针对单行的计算就是ordered fast,这个例子没有偷到,自己造了一个
据说在表比较大的时候使用model子句做一些计算会比传统sql快很多。只是听说,实际验证可能数据量比较小,没有明显差异