簡體   English   中英

在同一表上執行多個聯接

[英]Performance of multiple joins on the same table

給出下表:

行動

 - id - UNSIGNED INT - PRIMARY KEY
 - name - VARCHAR(50)
 - user1_id - UNSIGNED INT - INDEX
 - user2_id - UNSIGNED INT - INDEX
 - user3_id - UNSIGNED INT - INDEX

(我在示例中做了簡短介紹,但實際上有9位用戶)

使用者

 - id - UNSIGNED INT - PRIMARY KEY
 - name - VARCHAR(50)

我想顯示一個具有每個用戶名的操作列表(注意:一個操作並不一定總是定義其所有用戶)

我唯一能想到的解決方案是一個可怕的查詢,每個用戶只有一個左聯接:

SELECT name, user1.name AS name1, user2.name AS name2, user3.name AS name3
FROM actions
LEFT JOIN users AS user1 ON user1.id = actions.user1_id
LEFT JOIN users AS user2 ON user2.id = actions.user2_id
LEFT JOIN users AS user3 ON user3.id = actions.user3_id

實際查詢為9個用戶提供了9個左聯接(+ 2個內部聯接以恢復有關該操作的其他內容)

這行得通,但是必須有一個性能更高的解決方案。 這有多糟? 在相同表上的9個聯接與在9個相似表上的9個聯接之間在性能方面有區別嗎?

我敢肯定,如果翻轉一下,這將為您提供相似的結果集:

SELECT a.name, u.name
FROM actions a
CROSS JOIN users u

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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