2013-03-08 2 views
0

고유 한 트랜잭션 번호가있는 각 행에 반복되는 이름이 포함 된 5 백만 개의 레코드가 포함 된 매우 큰보기가 있습니다. 고유 이름을 포함하는 9000 개의 레코드에 대한 또 다른보기가 있습니다. 지금은 이름이 두 번째보기두보기 모두에 이름을 표시하는 방법은 무엇입니까?

select * from v1 where name in (select name from v2) 

에 존재하지만 쿼리를 실행하는 데 매우 오래 걸리는 첫 번째보기에서 레코드를 검색 할. 어떤 지름길 방법이 있습니까?

답변

2

INNER JOIN을 사용해 보셨습니까? 이 두 테이블에있는 모든 행을 반환합니다

당신이 JOIN 구문을 학습하는 데 도움이 필요하면
select v1.* 
from v1 
INNER JOIN v2 
on v1.name = v2.name 

, 여기에 좋은 visual explanation입니다.

DISTINCT 키워드를 추가하면 쿼리가 반환하는 중복 값이 ​​제거됩니다.

+0

감사합니다, 그것은 정말 빨리 일! – user2133404

+0

@ user2133404 여러분을 환영합니다! 도와 줄 수있어서 기뻐! – Taryn

2

JOIN.

DISTINCT은 다른 테이블에서 가입하기 때문에 목록에서 고유 한 레코드 만 반환 할 수 있으며 다른 테이블에서 일치하는 레코드가 두 개 이상있을 수 있습니다. 당신이 그것을 통해 결합되어 있기 때문에

SELECT DISTINCT a.* 
FROM v1 a 
     INNER JOIN v2 b 
      ON a.name = b.name 

빠른 성능을 위해 두 테이블에 열 NAME에 인덱스를 추가 할 수 있습니다.

더 친절하게 아래의 링크를 방문, 조인에 대해 더 많은 지식을 얻으려면 :

관련 문제