簡體   English   中英

左聯接還是內聯接?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM