我想找到不同列的总和,我可以使用以下两种方法来做到这一点:
第一种方法
$obj = $modelClass::findBySql($sql, $params);
$clone = clone $obj;
$grand_amount = $clone->sum('amount');
$grand_tax_amount = $clone->sum('tax_amount');
$grand_total =$clone->sum('total_amount');
第二种方式
$grand_amount = $modelClass::findBySql($sql1, $params)->sum('amount');
$grand_tax_amount = $modelClass::findBySql($sql1,$params)->sum('tax_amount');
$grand_total = $modelClass::findBySql($sql1, $params)->sum('total_amount');
请参考以上两种方法,哪一种效率更高?还是两种方式都会执行相同数量的查询?
答案 0 :(得分:2)
是否克隆查询都没有关系。 sum()
执行实际的SQL查询-如果您调用它三次,则将得到三个查询。
从微观优化角度来看,clone
应该比创建相同的查询对象快三倍。但是您不会看到太大的区别-执行真正的SQL查询将是这里的主要瓶颈,PHP的开销可以忽略不计。
顺便说一句:从您的示例进行克隆没有多大意义-您从不使用原始的$obj
,并且$clone
被使用了3次。您可以直接使用$obj
并避免克隆-仅当您要修改克隆查询而不修改原始ActiveQuery
对象时,才有意义。