2017-11-07 1 views
-1

약 1 억 개의 데이터 행이있는 테이블이 있습니다. 다른 테이블의 일부 값을 기반으로이 테이블의 일부 열 (약 50 개)을 업데이트해야합니다. 기본 키 열은 하나뿐입니다. 다른 제약 조건은 없습니다. 내가 처리를 필요로이데이터베이스 테이블을 업데이트하는 가장 빠른 방법

UPDATE 
    Table_A 
SET 
    Table_A.col1 = Table_B.col1, 
    Table_A.col2 = Table_B.col2 
FROM 
    Some_Table AS Table_A 
    INNER JOIN Other_Table AS Table_B 
     ON Table_A.id = Table_B.id 
WHERE 
    Table_A.col3 = 'cool' 

같은

뭔가은 분 단위로 할 수있다. 정상적인 데이터베이스가 목적을 수행합니까, 아니면 메모리 데이터베이스에서 사용해야합니까?

이 단일 업데이트 성명보다 나은 접근 방법이 있습니까?

답변

0

답변은 테이블에 인덱스가있는 위치에 따라 다릅니다. 업데이트 할 열에서 더 많은 인덱스를 정의할수록 업데이트 속도가 느려집니다. Balace에 select 문에 대한 2 개의 테이블과 where 절을 조인하기 위해 필요한 인덱스를 사용하십시오. 여전히 ... 50 레코드를 업데이트하는 데 30 분이 걸립니다.

+0

기본 키가 하나 뿐이며 인덱스가 생성되지 않았습니다. –

+0

100 레코드에 50 레코드 또는 50 컬럼 영향을 줍니까? –

+0

영향을받을 수있는 50 개의 열 –

0

이것은 Vertica 플랫 테이블 접근 방식의 매우 흥미로운 사용 사례입니다.

Vertica 설명서를 읽는 것이 좋습니다.

ALTER TRABLE table_a ALTER COLUMN col1 
DEFAULT (SELECT col1 FROM table_b WHERE table_b.id=table_a.id); 

(또는, 해당 컬럼에 이미 데이터가 포함 된 경우, 먼저 드롭, 그 기본에 다시 추가) :

충분 당신이 할 수 있다고합니다.

꽤 좋은 성능 결과를 얻었습니다. 시도해 볼만한 가치가 있다고 생각합니다. ...

관련 문제