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