Mysql
MySQL:左外連接和內連接之間哪個連接更好
如果所有連接都提供相同的結果,哪個連接性能更好?例如,我有兩個表
employees(emp_id,name, address, designation, age, sex)
和work_log(emp_id,date,hours_wored)
. 為了得到一些特定的結果inner join
並left join
給出相同的結果。但是,我仍然有一些疑問,不僅限於這個問題。
- 在結果值相同的情況下,哪個聯接更有效?
- 申請加盟時還需要考慮哪些其他因素?
- 內連接和交叉連接之間有什麼關係嗎?
沒有“更好”或“更差”的連接類型。它們具有不同的含義,必鬚根據它來使用。
在您的情況下,您可能沒有沒有 no 的員工
work_log
(該表中沒有行),因此LEFT JOIN
結果JOIN
將是等效的。但是,如果您有這樣的事情(一個沒有註冊的新員工work_log
),將JOIN
忽略該員工,而左連接(其第一個表是員工)將顯示所有這些,work_log
如果沒有,則欄位為空火柴。圖片來自 CL Moffatt 在程式碼項目中
同樣,性能是查詢正確性的次要因素。有人說你不應該使用
LEFT JOIN
s。確實,a 會LEFT JOIN
強制優化器以特定順序執行查詢,從而在某些情況下阻止某些優化(表重新排序)。這是一個例子。但是,如果犧牲了正確性/意義,則不應選擇其中一個,因為INNER JOIN
本質上並不更糟。其餘通常的優化照常適用。總而言之,
LEFT JOIN
如果你真的是說,請不要使用INNER JOIN
.在 MySQL
CROSS JOIN
中,INNER JOIN
和JOIN
都是一樣的。在標準中,從語義上講, aCROSS JOIN
是INNER JOIN
沒有ON
子句的,因此您可以獲得表之間的每個行組合。您在 Wikipedia 上有所有語義類型的 join 範例。在實踐中,在 MySQL 中,我們傾向於只寫
JOIN
和LEFT JOIN
.