2012-09-22 3 views
0

vps Mem : 524 (215used) 스왑 : 524 (75used), mysql 5.1.61 및 세 개의 테이블.두 개의 mysql 테이블 비교 작업이 너무 오래 실행

'data'열과 함께 'new'테이블에는 100 000 개의 레코드가 들어 있습니다.

RECORD1

record2 한 컬럼의 데이터 '와

record3

테이블'오래된 '1 개 000 000 개의 레코드를 포함한다.

RECORD1

record4 너무 한 컬럼의 데이터 '와

테이블'결과 '

record5.

'new'테이블을 'old'테이블과 비교하고 'old'테이블에없는 'result'레코드에 삽입합니다. 이 예에서는이 될 것입니다

record2

record3

나는 쿼리를

INSERT INTO result 

SELECT data FROM new 

LEFT JOIN old USING (data) 

WHERE old.data IS NULL 

내 문제를 사용 -이 쿼리 시간 이상 또는 어쩌면 더 실행 (내가 할 수있는 더 기다릴 필요가 없습니다).

나는 이러한 mysql 작업에 대해보다 빠른 방법을 알고 싶습니다. 이상적 - 10-20 분.

답변

1

나는이 쿼리가 더 빠를 것이라고 생각 : data

insert into result 
select data 
from new n 
where not exists 
(select 1 from old where data = n.data) 

그리고 지수 (하지만 result 테이블) newold 테이블에 제출 크게 성능이 향상됩니다.

create index ind1 on old(data) 
+0

같은 :

다음과 같은 방법으로 인덱스를 추가 할 수 있습니다. 시간 이상의 실행 및 아직 완료되지 않았습니다. – Alex

+0

'data' 필드의 유형은 무엇입니까? 어떤 종류의 값이 포함되어 있습니까? –

+0

데이터 형식 : varchar (100), 값 : ethomason ethomas ethstud etico, 인덱스가 정의되지 않았습니까? – Alex