mysql - 左加入 group_concat 太慢

标签 mysql sql

我有 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/

相关文章:

mysql - 站点选项表——如何处理多种值类型?

php - 从 mysql 查询中检索 uuid

php - 在数据库中搜索 Mysql PHP

php - 用户和密码与数据库不匹配

sql - SQL IN 是否比单独查找更有效?

javascript - 使用 AJAX 将多个 js 变量解析为 php

php - 使用 PHP 创建新页面?

mysql - mysql查询中如何从多条记录中获取记录总数

sql - 计算 SQL Server 中排除某些行的运行计数

php - 从关联数组中回显特定数据?