我有 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
关于mysql - 左加入 group_concat 太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7416567/