性能方面:在 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 模型中,我有UnithasMany,在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 函数的性能方面哪个更好

Laravel 创建与保存方法

在性能 Lambda 或简单循环方面哪个更好? [复制]

性能方面哪个更好:对象原型还是构造函数本机函数? [复制]

在 Java 流的性能方面哪个更好:组合过滤器或组合环境? [复制]

Java数据库,哪个更好用?