MySQL性能:使用GROUP_CONCAT进行单个查询,还是两个单独的查询?

War*_*tto 6 mysql performance group-concat

我有一个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
Run Code Online (Sandbox Code Playgroud)

... 要么 ...

SELECT username
FROM account
WHERE id = 1902;

SELECT permission_id
FROM account_permission
WHERE account_id = 1902
Run Code Online (Sandbox Code Playgroud)

使用单个查询,我可以完全按照我的要求获得结果.有了两个查询,我必须使用第二个结果集在应用程序(PHP)中创建逗号分隔的列表.

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

Gre*_*reg 7

性能应该没问题 - 比两个查询更好.你需要知道长度是有限的:

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

SET [GLOBAL | SESSION] group_concat_max_len = val;
Run Code Online (Sandbox Code Playgroud)