Mysql

MySQL:左外連接和內連接之間哪個連接更好

  • February 28, 2022

如果所有連接都提供相同的結果,哪個連接性能更好?例如,我有兩個表employees(emp_id,name, address, designation, age, sex)work_log(emp_id,date,hours_wored). 為了得到一些特定的結果inner joinleft join給出相同的結果。但是,我仍然有一些疑問,不僅限於這個問題。

  • 在結果值相同的情況下,哪個聯接更有效?
  • 申請加盟時還需要考慮哪些其他因素?
  • 內連接和交叉連接之間有什麼關係嗎?

沒有“更好”或“更差”的連接類型。它們具有不同的含義,必鬚根據它來使用。

在您的情況下,您可能沒有沒有 no 的員工work_log(該表中沒有行),因此LEFT JOIN結果JOIN將是等效的。但是,如果您有這樣的事情(一個沒有註冊的新員工work_log),將JOIN忽略該員工,而左連接(其第一個表是員工)將顯示所有這些,work_log如果沒有,則欄位為空火柴。

JOIN 類型的視覺化解釋

圖片來自 CL Moffatt 在程式碼項目中

同樣,性能是查詢正確性的次要因素。有人說你不應該使用LEFT JOINs。確實,a 會LEFT JOIN強制優化器以特定順序執行查詢,從而在某些情況下阻止某些優化(表重新排序)。這是一個例子。但是,如果犧牲了正確性/意義,則不應選擇其中一個,因為INNER JOIN本質上並不更糟。其餘通常的優化照常適用。

總而言之,LEFT JOIN如果你真的是說,請不要使用INNER JOIN.

在 MySQLCROSS JOIN中,INNER JOINJOIN都是一樣的。在標準中,從語義上講, aCROSS JOININNER JOIN沒有ON子句的,因此您可以獲得表之間的每個行組合。

在 Wikipedia 上有所有語義類型的 join 範例。在實踐中,在 MySQL 中,我們傾向於只寫JOINLEFT JOIN.

引用自:https://dba.stackexchange.com/questions/73087