2013-09-22 3 views
1

나는이 같은 쿼리가에서 하위 쿼리의 결과를 재사용하려고합니다. GROUP BY q 뒤에 약 20 개의 행이 남아 있습니다.는 MySQL은 효율적으로

하위 쿼리 (SELECT i FROM (SELECT q,w FROM tableA WHERE conds) join tableC WHERE id = t.q)은 내부적으로 위와 동일한 하위 쿼리를 사용하지만 그 중 q 값이 현재 그룹화되어있는 결과의 일부만 선택합니다.

내 문제는 이런 것 같습니다. 하위 쿼리 안에 WHERE id = t.q을 넣을 수 없어 성능이 너무 느립니다. q의 모든 고유 값에 대해 쿼리를 실행 중이므로 수백 개의 행을 생성 한 다음 인덱싱되지 않은 임시 테이블에서 WHERE 절을 수행해야합니다. 나는 전체 참여하기 전에 어디에서해야 할 것 같아요

어떤 아이디어를주십시오?

+1

http://sqlfiddle.com/에 테스트 케이스가 조회에 유효하지 않습니다 – Laurence

+0

매우 도움이 될 것이다는'SELECT' 목록에서 하위 쿼리는 하나의 열을 반환해야합니다, 당신은 내가를 선택 ('하고 있습니다 , j ...)' – rsanchez

+0

맞아. 수정했습니다. – user1063998

답변

0

이 쿼리는 동일한 결과를 생성 할 수 있지만 질문에 많은 정보가 누락되어 있는지 누가 알 수 있습니까?

Select 
    q, 
    count(x), 
    y, 
    i 
From 
    tableA a 
     inner join 
    tableC c 
     on cond and c.id = a.q 
     cross join -- is this an inner join? 
    tableB b 
Where 
    conds 
Group By 
    q, 
    y, 
    i