2009-10-13 153 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;