2009-10-13 104 views
5

我有一个MySQL数据库,其中每个用户都有一个帐户,每个帐户可以有多个权限。MySQL性能:使用GROUP_CONCAT的单个查询或两个单独的查询?

我的最终目标是结束帐户的用户名和逗号分隔的权限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,所以我不知道它的含义,在性能方面。

回答

6

性能应该可以 - 比两个查询更好。你需要注意的是,虽然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;