1. index rebuid (재작성)


SQL> ALTER INDEX ALL ON 테이블이름 REBUILD;


- 인덱스를 내부적으로 재생성한다. 재생성이 끝나면 기존에 있던 인덱스를 삭제한다.

- rebuild 중 통계정보가 다시 계산된다.

- 인덱스가 LOB 데이타 (ex: text, ntext, varchar(max), nvarchar(max), nvarvinary(max), image and xml data type 컬럼)을 포함하고 있다 면, online으로 빌드 될수 없다.

- index rebuild를 할 경우 all 옵션을 사용하지 않을 경우, 해당 인덱스가 클러스터이고, 그 클러스터에 관계된 secondary index가 있는 경우 secondary index 는 자동으로 rebuild 되지 않는다.  별도로 secondary index를 rebuild 해주거나 all 옵션을 꼭 줘야한다.

- 다중의 파티션에 걸쳐 있는 인덱스를 online 환경에서 rebuild할 경우 전체 인덱스를 모두 rebuild해야 한다.

  (전체 파티션을 모두 rebuild)

 

2. reorgnize (재구성)

 

SQL> ALTER INDEX 인덱스이름 ON 테이블이름 REORGANIZE;


- 인덱스 리프노드를 물리적으로 재구성한다.

- 통계 정보를 생성 하지 않는다.

- reorganize는 본질적으로 페이지를 다른 페이지와 바꾸는 것이기 때문에 다른 free space를 요구하지 않는다.  compaction(꽉 채움)와 defrag(조각모음)을 수행하면서 사용되지 않는 page들을 삭제한다.  reorganize 는 대부분의 논리적인 fragmentation을 제거할수있다. 하지만 전후의 extents가 물리적으로 계속되고 있는 확장된 fragmentation를 반드시 바로 잡을수는 없다.

- reorganize 는 DBCC INDEXDEFRAG(인덱스 조각모음)와 거의 동일하지만, DBCC INDEXDEFRAG는 내부 잠금이 발생하여 온라인으로 사용할수 없지만  reorganize 는 내부 잠금이 없기 때문에 온라인으로 사용할 수 있다.

- 파티셔닝 된 인덱스에서 하나의 인덱스가 여러개의 파티션으로 구성된 상황에서 하나의 인덱스 파티션만 reorganize 할수 있다