【问题标题】:Performance Wise: which is better in Laravel Database性能方面:在 Laravel 数据库中哪个更好
【发布时间】: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();

哪种方法更快更好。

谢谢。

【问题讨论】:

    标签: php mysql laravel orm eloquent


    【解决方案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.
    • 非常感谢您的努力
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-05
    • 2017-08-09
    相关资源
    最近更新 更多