2011-08-04 2 views
2

Oracle 10g에서 색인 생성 및 alter table이 생성되는 순서는 중요합니까?열 추가 전에 색인 생성 vs. 열 추가 후 색인 생성 - 중요합니까?

  1. 내가 인덱스를 만들 I (C) 다음 열 X를 추가, Y :

    내가 테이블 T.의 열 C에 절은 지금은 다음 시나리오 중 하나를 수행 어디와 질의 Q를 말해봐 ,지.
  2. 열 X, Y, Z를 추가 한 다음 색인 I (C)를 만듭니다.

Q '는 선택한 * T에서 어디이든 C의 ='는 T가 상당히 많은 수의 행을 포함하는 경우 (1) 및 (2) 사이

가 테이블 T에 Q의 성능에 큰 차이가있을 것인가?

저는 개인적으로 # 2 할 연습을하지만 다른 사람들은 다른 의견을 가진 것처럼 보입니다. 당신이 이전 또는 인덱스를 생성 한 후 테이블에 열을 추가하는 경우

감사

답변

4

그것은 차이가 없습니다. 옵티마이 저는 u 리에 대해 동일한 플랜을 선택해야하며 실행 시간은 변경되지 않아야합니다.

테이블의 물리적 저장 매개 변수에 따라 추가 열을 추가하고 데이터를 채우면 열 이동이 발생할 수 있습니다. 해당 행을 마이그레이션하면 테이블의 인덱스가 변경됩니다. 세 개의 새 열에 데이터를 채울 때 인덱스가 존재하면 추가 인덱스 유지 관리로 인해 X, Y 및 Z로 데이터를 채우는 데 약간 시간이 걸릴 수 있습니다.

1

열을 채우지 않고 열을 추가하면 메타 데이터가 변경된 것처럼 매우 빠릅니다. 색인을 추가하려면 새로운 색인 세부 사항을 기록하는 간단한 메타 데이터 변경보다 많은 시간과 노력이 필요할 수 있도록 표를 읽어야합니다 (또는 잠재적으로 다른 색인).

새 열이 ALTER TABLE의 일부로 채워지면 다른 문제입니다.

  1. 데이터베이스는 서버의 메모리가
  2. 따라서 그 해당 테이블에서 변경된 모든 행을 기록 할 공간이 없을 수 있습니다
  3. 테이블 데이터의 모든 행에 데이터를 추가하는 과정에서 예기치 않은 종료를 거칠 수있다 행 변경은 커밋 전에 데이터 파일에 기록 될 수 있으므로 더티 블록으로 기록됩니다.
  4. ALTER 테이블이 성공적으로 완료된 후 해당 블록을 다음에 읽으면 지연된 블록 정리가 수행됩니다 (즉, 위탁 됨)

(데이터가 포함 된) 열을 먼저 추가하면 create index가 테이블을 읽고 (아마도) 지연된 블록 정리에 대한 추가 작업을 수행합니다.

인덱스를 작성하는 경우 먼저 인덱스 작성이 빠를 수 있습니다, 열을 추가하지만 지연 블록 청소용이 발생하지 않으며, 하우스 키핑이

합니다 ( select * from T where C = whatever에 의해 잠재적으로) 나중에 응용 프로그램이 포착됩니다