2013-06-11 12 views
0

에 GROUP_CONCAT이 느린 경우 GROUP_CONCAT을 사용하여 하나의 필드에 결과를 그룹화하는 하위 쿼리가 있습니다. 하지만이 쿼리는 실행에 3 초가 걸리지 않고 0.05 초가 걸립니다. accessory.actionid에 대한 색인을 생성했으며 action.actionid는 PK입니다. 성능 향상을위한 해결책이 있습니까?하위 쿼리

SELECT 
    action.actiondate, acc.acc, acc.acccount 
FROM 
    `action` 
LEFT JOIN 
    (SELECT 
    actionid, 
    GROUP_CONCAT(accessory) AS acc, 
    COUNT(actionid) AS acccount 
    FROM 
    accessorieslink 
    GROUP BY actionid) AS acc 
    ON acc.actionid = action.actionid 
+0

성능 그냥 GROUP_CONCAT 행 또는 전체 accessorieslink 하위 쿼리에서 저하합니까? –

+0

concat 라인 인 것 같습니다. 쿼리를 실행하면 빨리 실행됩니다. – zima10101

답변

1

이를 사용하여 더 나을 수 있습니다

SELECT 
    a.actiondate, 
    GROUP_CONCAT(IFNULL(al.accessory,'')) as acc, 
    SUM(IF(al.actionid IS NULL,0,1)) as acccount 
FROM 
    `action` a 
LEFT JOIN accessorieslink al 
    ON al.actionid = a.actionid 
GROUP BY 
    a.actionid 
ORDER BY 
    NULL 
+0

이 작업은 훌륭합니다. 쿼리는 0.009 초에 실행됩니다! – zima10101

+0

그것을 듣고 다행 :) 당신이 가장 잘 맞는 것이라고 생각하는 대답을 잊지 마세요 – Stephan

+0

완료하고 감사합니다 – zima10101

1

당신이 생각하는 원인 MySQL의 테이블 acc 같은 GROUP_CONCAT의 별칭을 만들기 때문이다.

aliace 이름 중 하나를 변경하십시오.

GROUP_CONCAT(accessory) AS acc, 
           ^^^--//------ this 

GROUP BY actionid) AS acc 
         ^^--// and this 
+0

이 아이디어와 성능에 변화 없음 – zima10101