2013-02-13 4 views
2

이 MySQL 질문이 있습니다. 그것은 잘 동작하지만 극단적으로 느립니다. 실행하는 데 최대 30 초가 걸립니다.MySQL 서브 쿼리가 매우 느림

난 단지 서브 쿼리 ( SELECT Max(Id) FROM comments GROUP BY Tipid)를 실행하면
SELECT t.Id, Subject, k.info 
FROM tip t 
LEFT JOIN comments k ON t.Id = k.Tipid 
WHERE event = 1 
AND k.Id 
IN (
SELECT Max(Id) FROM comments GROUP BY Tipid 
) 

그것을 실행하는 데 약 0.02 초 정도 걸립니다.

하위 쿼리에 문제가 발생했습니다. 아이디어가 있습니까?

+1

쿼리 성능에 대해 질문 할 때 사용중인 테이블에 대한 세부 정보를 포함 시키십시오. 테이블, 인덱스의 행. 또한 시작 부분에'EXPLAIN'이라는 단어로 쿼리를 실행하여 실행 계획 추적을 생성하고이를 매우 유용하게 게시하십시오. – Raad

답변

2

당신이 최대 (ID)이이이

SELECT t.Id, Subject, k.info 
    FROM tip t 
    LEFT JOIN comments k ON t.Id = k.Tipid 
    WHERE event = 1 
    AND k.Id in (select Max(Id) from comments) 
1

대신을 시도해보십시오

SELECT t.Id, t.Subject, c.info 
FROM tip t 
LEFT JOIN 
(
    SELECT Tipid, MAX(Id) AS MaxId 
    FROM comments 
    GROUP BY Tipid 
) AS c ON t.Id = c.Tipid 
     AND t.Id = c.MaxId 
WHERE t.event = 1; 
0

가 많은 이유를 시도 선택하는 경우가 그룹을 필요 없어요 ... 을 내가 유하려고 생각 이 하나 ...

SELECT t.Id, Subject, k.info 
FROM tip t 
INNER JOIN comments k ON t.Id = k.Tipid 
WHERE event = 1 
    AND k.Id IN (SELECT Max(Id) FROM comments GROUP BY Tipid) 

50 개 레코드 후에 LEFT JOIN이 너무 느려지므로.