2014-01-07 2 views
3

테이블 A에 1,000 만 개의 행과 테이블 B에 250 만 개의 행이있는 두 개의 거대한 테이블이 있습니다. 두 테이블 모두 공통 필드 ID를 가지고 있습니다. 표 A에는 ~ 250 열이 있고 표 B에는 5 열이 있습니다. 테이블 B에있는 모든 ID는 테이블 A에 있습니다. 테이블 A에 테이블 B에 필드를 추가하고 싶습니다. 두 가지 옵션이 있는데 둘 다 많은 시간을 사용하고 있습니다. 나는 어느 것이 효율적인지 알고 싶다.열 추가 및 업데이트/추가 행이있는 새 테이블 작성

옵션 1 :
alter table B add column field date;
update B join A using(id) set a.field=b.field;

옵션 2 :
create table C as select a.*,b.field from B join A using(id);

id의 MyISAM가있는 테이블 ENGINE 모두 연동된다.

어느 옵션이 더 빠릅니까?

옵션 1에서 열을 추가하는 데 시간이 걸리므로 업데이트하는 동안 많은 시간이 상태 copy to tmp table에 대해 취해 졌기 때문에 2라고 생각합니다. 옵션 1에서는 '데이터 전송 중'상태로 바로 시작합니다. 나 맞아?

다른 빠른 방법으로이 작업을 수행 할 수 있습니까? 당신이보기를 만들 수 있습니다 당신은 단지 정보를 선택 whant 경우

+2

옵션 2를 실행할 수 있습니다. –

+0

뭔가 빠진 것 같아요.하지만 데이트 콜럼을 A에서 B로 옮기려는 거예요? 그게 맞다면 내가 할 수 있을지 물어봐도 될까요? – Melon

+0

@Melon B의 ID에 대해서는 A에서 날짜 형식으로 된 필드를 가져와야합니다. 다른 목적으로 CSV에 넣을 B의 ID에만 필요합니다. –

답변

1

당신이 데이터베이스에 중복 데이터를 가진

select field,any_field from my_view where any_condition; 

를 실행할 수 있습니다 함께 그래서

CREATE VIEW 'my_view' as select * from B join A on B.id = A.id; 

모든 데이터를 가져 오는 것은 절대적으로 unrecommend

입니다

도움이되기를 바랍니다. 그것은 당신의 선택 사항 중 어느 것도 아닙니다.


당신은 또한이 시나리오에 더 적합 할 것이다 쿼리 자체

select field,any_field from B join A on B.id = A.id where any_condition; 
관련 문제