【问题标题】:MySQL performance: Single query using GROUP_CONCAT, or two separate queries?MySQL 性能:使用 GROUP_CONCAT 的单个查询,还是两个单独的查询?
【发布时间】:2010-12-06 05:46:40
【问题描述】:

我有一个 MySQL 数据库,其中每个用户都有一个帐户,每个帐户可以有多个权限。

我的最终目标是得到帐户的用户名和以逗号分隔的权限 ID 列表。有两种方法可以做到这一点:

SELECT a.username, GROUP_CONCAT(rp.permission_id) as permission_ids
FROM account AS a
JOIN role_permission AS rp
ON rp.role_id = a.role_id
WHERE a.id = 1902

...或...

SELECT username
FROM account
WHERE id = 1902;

SELECT permission_id
FROM account_permission
WHERE account_id = 1902

通过单个查询,我可以得到我想要的结果。通过两个查询,我必须使用第二个结果集在应用程序 (PHP) 中创建逗号分隔列表。

是否有任何性能原因不选择第一个选项?我以前从未使用过 GROUP_CONCAT,所以我不知道它在性能方面的含义。

【问题讨论】:

    标签: mysql performance group-concat


    【解决方案1】:

    性能应该还可以 - 比两个查询要好。您需要注意length is limited

    结果被截断为group_concat_max_len系统变量给出的最大长度,其默认值为1024。该值可以设置得更高,尽管返回值的有效最大长度受max_allowed_pa​​cket 的值。运行时改变 group_concat_max_len 值的语法如下,其中 val 为无符号整数:

    SET [GLOBAL | SESSION] group_concat_max_len = val;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-21
      • 2011-08-19
      相关资源
      最近更新 更多