2010-02-16 3 views
0

저는 SQL에 익숙하지 않아 제 용어가 정확하지 않을 수 있습니다.2 억 개의 레코드가 들어있는 테이블에서 일부 레코드를 선택하십시오.

2 억 5 천만 개의 레코드가있는 테이블 정렬이 있습니다. 여기에는 두 개의 열 chain_id1과 chain_id2가 있습니다. 이 체인 중 일부는 22000 개의 레코드가있는 다른 테이블 Centroid의 chain_id에 대한 외래 키입니다.

기본적으로 두 체인을 모두 중심으로하는 모든 레코드가 필요합니다.

나는 다음과 같은 쿼리를 사용하여 시도 :

insert into NewAlignment(...) 
select .... 
from Alignment as A 
    , Centroid as C1 
    , Centroid as C2 
where (A.chain_id1 = C1.chain_id) 
    and (A.chain_id2 = C2.chain_id) 

그러나 이해할 수 위의 질의 단지 포장 마차 테이블의 크기를 찾고 있습니다.

그래서 테이블을 스캔하여 값을 확인한 다음 새 테이블에 삽입하는 스크립트를 작성했습니다. 그 방법으로 1000000 개의 레코드에 대해 약 13 분이 걸렸습니다.

속도를 높이는 방법이 있습니까?

고마워요.

+0

Centroid 테이블에 몇 개의 고유 한 chain_id 값이 있습니까? – goat

답변

1

테이블에 인덱스를 추가하는 것이 좋습니다 (특히 Alignment.Chain_id1, Alignment.Chain_id2Centroid.Chain_id). 이것은 많은 도움이 될 것입니다.

+0

이미 세 가지 모두에 BTREE 인덱스가 있습니다. – amit

관련 문제