2009-10-13 3 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 :

결과는하지만,이 값은 높게 설정 될 수있다 1024의 기본 값을 갖는 group_concat_max_len 시스템 변수에 의해 주어진 최대 길이로 잘립니다

리턴 값의 유효 최대 길이는 max_allowed_packet의 값에 의해 제한됩니다. 런타임에 group_concat_max_len의 값을 변경하는 구문은 다음과 같습니다. 여기서 val은 부호없는 정수입니다.

SET [GLOBAL | SESSION] group_concat_max_len = val;