2013-07-09 2 views
0

40 개의 컬럼이있는 테이블 'A'가 있습니다. 'A'의 20 개 특정 열에서 20 개 열이있는 다른 테이블 'B'로 데이터를 복사해야합니다. 약 3 천만 건의 기록이있을 것입니다. PLSQL에서이 작업을 수행하는 가장 효율적인 방법은 무엇입니까?테이블에서 데이터를 복사하여 다른 테이블에로드하십시오.

+1

왜 PL/SQL, 왜 똑바로 들어오는 SQL'select ...'? –

+1

태그를 선택하면 이미 답을 염두에 두었습니다. 우리에게 기대하는 것은 무엇입니까? – APC

+0

예, BULK COLLECT 및 FORALL을 사용하여 구현했습니다. 효율성을 향상시키기 위해 조정할 수있는 방법이 있는지 알고 싶습니다. –

답변

1

"매일 테이블 B가 잘리고 새 데이터가 A에서 으로 삽입됩니다."

좋아, 그렇게하는 가장 효율적인 방법은하지 않는 것입니다. 대신 구체화 된보기를 사용하십시오. 표 A의 구체화 된보기 로그를 사용하여 점진적인 변경 사항을 캡처하여 매일 또는 원하는 다른 창에 적용 할 수 있습니다. Find out more.

handrolled PL/SQL 또는 순수 SQL을 사용하는 접근 방식과 비교하면 우습게 비효율적입니다.

0

데이터에 대한 변환을 수행해야합니까 아니면 데이터를 한 테이블에서 다른 테이블로 바로 복사하는 중입니까?

인덱스를 별도로 만들어야하지만 가장 쉬운 방법은이 방법입니다. 테이블이 이미 존재 x를하면

create table B as (select A.c1, A.c2, A.c3..... from A); 

, 당신은 다만 수있는

insert into B select A.c1, A.c2.... from A 

당신은 삽입이 완료 될 때까지 테이블 X에있는 모든 인덱스를 드롭 할 것,이 속도를합니다.

+0

아니요, 데이터 정렬이 필요하지 않습니다. 데이터를 B에 복사하면됩니다. 일일 'B'테이블이 잘리고 새 데이터가 추가됩니다. 그러면 가장 효율적인 방법이 될 것입니다. 1) B에 삽입하거나 OR 을 입력하십시오. 2) BULK COLLECT –

+0

성능 테스트를 한 적이 없습니다. 이건 일회 일인가요? –

+0

INSERT INTO로 시도했지만 50000 행이 삽입 될 때마다 커밋해야한다면 어떻게해야합니까? –

관련 문제