sum 不使用 get() 时有什么影响? Laravel 5.3
What is the effect when the sum does not use get() ? Laravel 5.3
我有100万条数据
当我 sum
使用 get()
时:
$cache = Summary::where('type', $type)
->where('keys->year', '=', (string)$year)
->get();
$summary = $cache->sum('summary');
很慢
但是当我 sum
不使用 get()
时,像这样:
$cache = Summary::where('type', $type)
->where('keys->year', '=', (string)$year);
$summary = $cache->sum('summary');
速度非常快
sum
不使用get
是否可以?
如果您使用 ->get() ,您实际上是在从数据库中检索信息。如果您有很多行,这会大大降低查询速度。
->sum() 只是对行求和,与 ->get() 相比,这是一种轻量级的方法。
如果您实际上不需要行中的信息,而只需要所有行的总和,您应该只使用 ->sum() 而不是 ->get() 。您不需要使用 ->get() 来让 ->sum() 工作。
Laravel Documentation 包含以下示例:
$users = DB::table('users')->count();
$price = DB::table('orders')->max('price');
两者都不使用 ->get() 来计算 ->count() 或 ->max()。
我想你甚至可以这样做:
$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');
我有100万条数据
当我 sum
使用 get()
时:
$cache = Summary::where('type', $type)
->where('keys->year', '=', (string)$year)
->get();
$summary = $cache->sum('summary');
很慢
但是当我 sum
不使用 get()
时,像这样:
$cache = Summary::where('type', $type)
->where('keys->year', '=', (string)$year);
$summary = $cache->sum('summary');
速度非常快
sum
不使用get
是否可以?
如果您使用 ->get() ,您实际上是在从数据库中检索信息。如果您有很多行,这会大大降低查询速度。
->sum() 只是对行求和,与 ->get() 相比,这是一种轻量级的方法。
如果您实际上不需要行中的信息,而只需要所有行的总和,您应该只使用 ->sum() 而不是 ->get() 。您不需要使用 ->get() 来让 ->sum() 工作。
Laravel Documentation 包含以下示例:
$users = DB::table('users')->count();
$price = DB::table('orders')->max('price');
两者都不使用 ->get() 来计算 ->count() 或 ->max()。
我想你甚至可以这样做:
$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');