性能方面:在 Laravel 数据库中哪个更好
Posted
技术标签:
【中文标题】性能方面:在 Laravel 数据库中哪个更好【英文标题】:Performance Wise: which is better in Laravel Database 【发布时间】:2017-04-08 14:58:06 【问题描述】:我使用 laravel 已经有一段时间了,我只是好奇哪个性能更好。在这种情况下,我有两个表,一个 department 表和一个 unit 表,其结构如下
部门表
Field Type Null Key
---------- ---------------- ------- ------
id int(10) unsigned NO PRIMARY
name varchar(255) NO
单位表
Field Type Null Key
------------- ---------------- ------ ------
id int(10) unsigned (NULL) PRIMARY
unit varchar(255) (NULL)
department_id int(10) unsigned (NULL) FOREIGN
created_at timestamp (NULL)
updated_at timestamp (NULL)
在Department
模型中,我有Unit
和hasMany
,在unit
模型中,我有belongsTo
的部门
现在我的问题是,如果我想获得一个部门的所有单位,方法一和方法二之间的最佳方法
方法一
$department = Department::find($id);
$units = $department->unit;
方法二
$units = DB::table('units AS a')
->select(array('a.id AS id','department_id', 'unit'))
->join('departments AS b', 'a.department_id', '=', 'b.id')
->where('b.id', '=', $id)
->get();
哪种方法更快更好。
谢谢。
【问题讨论】:
【参考方案1】:方法一到目前为止。
如果确实存在更快的差异,我们将讨论微优化,对于这些情况,我们将采用更简洁和最容易理解的方式,所以第一种。
另外我想推荐其他改进:
一个部门有多个单位,所以关系名称应该是units
,而不是unit
。
$units = $department->units;
尽可能使用隐式绑定。
public function yourMethod (Department $department)
$units = $department->units;
return view('your-view', compact('units'));
更新
我在我的项目中使用Laravel Debugbar 复制了一个示例,这些是每个查询执行 5 次的结果:
方法一:
320μs 310μs 300μs 320μs 320μs~314μs
方法二:
310μs 330μs 360μs 300μs 310μs~322μs
如您所见,没有区别,或者至少是微不足道的。因此,在性能相同的情况下,您应该选择第一种方法,因为它的代码质量更好。
【讨论】:
但你不认为这种方法会进行两次数据库调用 @GhostWorker 答案已更新,请检查。两种方法的调用次数相同:1. 非常感谢您的努力以上是关于性能方面:在 Laravel 数据库中哪个更好的主要内容,如果未能解决你的问题,请参考以下文章
在 C# 的 ToUpper 或 SQL 中的 Upper 函数的性能方面哪个更好