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