Php 当总和不使用get()时会产生什么影响?拉威尔5.3
我有一百万个数据 当我做Php 当总和不使用get()时会产生什么影响?拉威尔5.3,php,laravel,sum,laravel-5.3,laravel-eloquent,Php,Laravel,Sum,Laravel 5.3,Laravel Eloquent,我有一百万个数据 当我做sum时,像这样使用get(): $cache = Summary::where('type', $type) ->where('keys->year', '=', (string)$year) ->get(); $summary = $cache->sum('summary'); 非常慢 但是当我不使用get()而进行sum时,我会这样做: $cache = Summary::wh
sum
时,像这样使用get()
:
$cache = Summary::where('type', $type)
->where('keys->year', '=', (string)$year)
->get();
$summary = $cache->sum('summary');
非常慢
但是当我不使用get()
而进行sum
时,我会这样做:
$cache = Summary::where('type', $type)
->where('keys->year', '=', (string)$year);
$summary = $cache->sum('summary');
非常快
如果不使用get
而使用sum
是否可以?如果使用->get(),则实际上是从数据库检索信息。如果您有很多行,这会大大降低查询速度
->sum()只对行求和,与->get()相比,该方法是轻量级的
如果您实际上不需要来自行的信息,而只需要所有行的总和,那么您应该只使用->sum()而不使用->get()。无需使用->get()即可使->sum()正常工作
包含以下示例:
$users = DB::table('users')->count();
$price = DB::table('orders')->max('price');
两者都不使用->获取()来->计数()或->最大值()
我想你甚至可以:
$sum = Summary::where('type', $type)->where('keys->year', '=', (string)$year)->sum();
使用get()获取所有数据,然后手动查找检索到的数据集合的总和。但是,如果不使用get(),$cache
仍然是一个查询,那么对查询进行求和操作将在数据库上运行聚合查询,而不是提取所有数据
$summary = Summary::where('type', $type)
->where('keys->year', '=', (string)$year)
->sum('summary');
如果没有get(),你的语句就不会被执行。@Friedrich Roell,我做
sum
,如果没有get
,它就被执行了。这是否意味着结论是可以完成的?没有效果?如果只想对行求和,则不使用->get()在本例中没有效果否。这是否意味着结论是可以这样做?没有效果。例如错误etc@samueltoh结论是,这是正确的方法,无需使用get()。没有错误或问题,这是正确的方法。