簡體   English   中英

與group_concat的左連接太慢了

[英]Left join with group_concat is too slow

我有2張桌子:

users (id, firstname, lastname, etc)
users_to_groups (user_id(index), group_id(index))

我想創建一個返回如下記錄的查詢:

firstname   lastname    groups
John        Smith       1,2,3,5
Tom         Doe         3,5

我使用GROUP_CONCAT函數,目前我的查詢是:

SELECT * FROM users
LEFT OUTER JOIN 
(
     SELECT user_id, group_concat(group_id) FROM users_to_groups GROUP BY user_id
) AS i
ON users.id = i.user_id

它有效,但速度很慢。 我在組表中有40k用戶和260k記錄。 看起來查詢不使用索引,並為每個用戶遍歷所有260k行。

有沒有辦法讓它更快? 這需要3分鍾以上,但我認為不應該。

謝謝!

嘗試:

SELECT
    u.user_id, u.firstname, u.lastname, group_concat(g.group_id)
    FROM users                           u
        LEFT OUTER JOIN users_to_groups  g ON u.id on g.user_id
    GROUP BY u.id, u.firstname, u.lastname

它不是左連接,而是使查詢變慢的子選擇。 當涉及到sub select時,MySQL真的很糟糕。

這可能更快:

SELECT 
  u.id, u.firstname, u.lastname,
  group_concat(ug.group_id) AS groups
FROM
  users u
  LEFT JOIN users_to_groups ug ON ug.user_id = u.id
GROUP BY 
   u.id, u.firstname, u.lastname

暫無
暫無

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

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