2016-11-24 25 views
3

我一直在使用laravel一段時間,我只是好奇哪些更好的性能。以這種情況下,我有兩個表部門表和單元表具有以下結構性能明智:哪個更好Laravel數據庫

Department表

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型號我有UnithasManyunit模型我有belongsTo

現在我的問題是,如果我想在一個部門中的所有單元,其方法是辦法一個方法有兩個

方法之間最好的部門ONE

$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

APPROACH ONE遠。

如果確實存在差異更快,我們將討論微觀優化,對於這些情況,我們將採用更清晰和最易於理解的方式,即第一種。

此外,我想推薦其他改進:

一個部門有很多單位,這樣的關係,名字應該是units,不unit

$units = $department->units;

時,你也可以使用隱式綁定。

public function yourMethod (Department $department) 
{ 
    $units = $department->units; 
    return view('your-view', compact('units')); 
} 

UPDATE

我複製我的項目的例子有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

正如你所看到的,是沒有區別的,或者至少是微不足道的。所以,具有相同的性能,你應該採取第一種方法,因爲更好的質量代碼。

+0

但你不覺得這種方法會使兩個數據庫調用 –

+0

@GhostWorker答案更新,檢查它。兩種方法的通話次數相同:1. –

+0

您的努力非常值得讚賞 –

相關問題