[英]LEFT JOIN or INNER JOIN?
我有下表。 所有字段都不為NOT NULL
。
tb_post
id
account_id
created_at
content
tb_account
id
name
我想選擇最新的帖子以及名字。 我應該使用INNER JOIN
還是LEFT JOIN
? 根據我的理解,兩者都會產生相同的結果。 但是哪個更正確或更快速?
SELECT p.content, a.name
FROM tb_post AS p
[INNER or LEFT] JOIN tb_account AS a
ON a.id = p.account_id
ORDER BY p.created_at DESC
LIMIT 50
左聯接絕對不比內聯接快。 實際上,它比較慢。 根據定義,外部聯接(LEFT JOIN或RIGHT JOIN)必須完成INNER JOIN的所有工作以及對結果進行空擴展的額外工作。 僅僅由於結果集的大小,也期望返回更多的行,從而進一步增加了總的執行時間。
(即使由於某些難以想象的因素融合而使LEFT JOIN在特定情況下更快,它在功能上也不等同於INNER JOIN,因此您不能簡單地將一個實例的所有實例替換為另一個實例!)
最好去INNER JOIN。
根據我的觀點,正確的是內部聯接
因為它返回只包含匹配元素的結果集,其中“左聯接”返回“左表”中的所有條目。 在這種情況下,我認為內部聯接返回僅需要處理的數據量。
您必須問自己兩個問題。
1)在您的應用程序生命周期中的某個時候,是否有可能使用空或無效的account_id
帖子?
如果沒有,那沒關系。
如是...
2)是否希望在查詢結果中包含沒有關聯帳戶的帖子? 如果是,請使用LEFT JOIN,否則請使用INNER JOIN。
我個人認為速度不是很重要:它們之間的區別在於它們的作用。
在您的情況下,它們碰巧會產生相同的結果,但這並不意味着它們可以互換,因為選擇一個或另一個仍會告訴另一個讀取您的代碼的人。
我傾向於這樣思考:INNER JOIN-兩個表基本上是一個集合,我們只需要組合兩個源即可。 LEFT JOIN-左邊的表格為來源,並且可選地,我們可能有其他信息(在右邊的表格中)。
因此,如果我閱讀您的代碼並看到一個LEFT JOIN,那便是您對我的數據模型的印象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.