2013-08-12 3 views
0

조인 사용하여 쿼리를 최적화SQL은 내가 테이블 productHistory이

productHistory (id_H , id_product , name , tsInsert); 

나는 테이블에서 가져가 (끝 시작)를 제공하는 기간의 마지막 제품을 productHistory 싶어 : tsInsert가 시작 사이이어야하며, 끝.

I는 다음과 같이 수행 할 수 있습니다

select max(id_H) 
from productHistory 
where tsInsert>=:start and tsInsert <=:end 
group by id_product; 

다음 productHistory에서 모두 선택 위치를 이전 선택에 id_H.

이 쿼리는 예를 들어 가입 권리를 사용하는 다른 솔루션이 매우 무거운 편이다?

SELECT * FROM productHistory x 

    INNER JOIN 
    (
     SELECT MAX(id_H) as maxId 
     FROM productHistory 
     GROUP id_product 
    ) y 

ON x.id_H = y.maxId 
and x.TSINSERT >=:start and x.TSINSERT <=:end 
+4

귀하의 문이수록 좋은 것입니다 : –

+0

"매우 무겁다"는 것은 실행 시간이 길다는 의미입니까? – athabaska

답변

0

나는이 솔루션을 시도했다. "최적화"를 제안 할 수있는 것은 테이블에 적절한 인덱스를 추가하는 것입니다. 어떤 DBMS를 사용하고 있습니까? 쿼리 계획을 게시 할 수 있습니까?
+2

당신은 당신의 질문에 추가하여 자신의 질문에 대답하지 않아야합니다. 질문을 수정 *하고 추가 정보를 추가하십시오. 또한 실행 계획을 추가하고 사용중인 DBMS를 추가하십시오. –

+0

는하지만 그건 내 솔루션 – junior

+0

롤, 내 실수지만 나는 이것이 당신이 필요 반환 의심한다. 두 행'id_h, id_product 다음 tsInsert'을 고려 :'1, 99, 01/01/2000'과'2, 99, 01/01/1990'과': start'을> 1990있는 것은 ** 어떤 행을 반환하지 않습니다 **. –