連表查詢都用Left Join吧

最近看同事的代碼,SQL連表查詢的時候不少時候用的是Inner Join,而我以爲對咱們的業務而言,99.9%都應該使用Left Join(還有0.1%我不知道在哪),我用最簡單的方式來描述這二者的區別,直接看圖(有點草啊):性能

個人作法是永遠把查詢主體放在左邊,而後右邊挨個連上要附加的信息,有則連上,沒有則留null,這樣思路是最清晰的。字體

Inner Join跟這個的區別是若是附加表找不到對應ID,那麼這行記錄就不會出現,我在圖中用紅色字體說明了這個區別。(各類Join的方式沒有任何性能上的差異,只有功能上的差異)blog

另一定必定要注意這幾點:索引

  1. extra id這樣的字段必定要指向附加表的主鍵。這並不是SQL技術上的要求,而是咱們業務邏輯的要求,若是指向的附加表的extra id不惟一,那極有可能帶來你不想要的結果(一般是大量的重複),邏輯上也很難描述了。
  2. 若是附加表的extra id沒有索引,將大大影響連表的效率。
  3. 若是想確保必定能帶出附加信息,可使用非空約束和外鍵約束。

我就簡單這麼定了:必定使用Left Join(除非你明確知道本身想要的是Inner Join),連表的列必定是指向另外一張表的主鍵的。效率

相關文章
相關標籤/搜索