[SQL] 성능 최적화 - 1. 인덱스 재구성

kt·2025년 2월 16일

인덱스 재구성은 데이터베이스에서 성능을 최적화하고, 인덱스의 상태를 개선하기 위한 중요한 작업입니다.

특히, 데이터가 빈번하게 변경되는 환경에서는 인덱스의 효율성이 떨어질 수 있기 때문에, 주기적으로 인덱스를 재구성하는 것이 필요합니다.

그럼 인덱스 재구성의 개념과 필요성, 방법에 대해 알아보겠습니다.


1. 인덱스 재구성이란?

인덱스는 시간이 지나면서 단편화(Fragmentation)가 발생하여 성능이 저하될 수 있다.
단편화가 누적되면 인덱스의 효율성이 점점 떨어지게 되며, 이는 데이터 검색 성능에 영향을 미치게 된다.

단편화된 인덱스를 다시 정렬하고 최적화하는 과정이 인덱스 재구성이다.

🔍 인덱스 단편화란?

인덱스 단편화는 인덱스 구조 내에서 데이터가 비효율적으로 저장되는 현상이며,
이는 데이터 삽입, 삭제, 갱신이 일어나면서 발생합니다. 

예를 들어, 인덱스를 사용하여 데이터를 정렬한 후 삭제나 삽입을 할 경우
인덱스는 실제 물리적인 순서와 논리적인 순서가 일치하지 않게 되는데, 
이런 비효율적인 상태를 방치하면 검색 성능이 저하되며, 결국 데이터베이스의 전반적인 성능에도 영향을 미치게 됩니다.

2. 인덱스 재구성의 필요성

데이터가 변경되면서 인덱스가 비효율적으로 변할 수 있는데,
이를 재구성하면 다시 정렬되고 최적화된 상태로 돌아오기 때문에 재구성이 필요합니다.

주로 다음과 같은 이유로 인덱스를 재구성합니다.

  • 단편화 해소 : 단편화된 인덱스는 성능 저하를 일으킬 수 있습니다.
  • 디스크 공간 최적화 : 단편화가 심할 경우 불필요한 디스크 공간이 낭비됩니다.

3. 인덱스 재구성 방법

인덱스 재구성은 크게 두 가지 방법으로 나뉩니다.

1. Rebuild

build는 기존의 인덱스를 완전히 삭제한 후, 새로 생성하는 방식

  • 관련된 통계 정보도 새로 업데이트되므로 재구성 후 성능이 크게 향상될 수 있습니다.
  • 오프라인 작업이므로 작업 중에 해당 인덱스를 사용할 수 없습니다.
	[SQL]
	- Oracle : ALTER INDEX idx_column_name REBUILD;
	- MSSQL : ALTER INDEX idx_column_name ON table_name REBUILD;

2. Reorganize

Reorganize는 인덱스 내에서 단편화된 부분만 부분적으로 정리하는 방식

  • 인덱스를 완전히 재작성하는 것보다 덜 부담스럽지만, 큰 성능 향상은 기대하기 어렵습니다.
  • 온라인 작업이므로 작업 중에도 인덱스를 사용할 수 있습니다.

4. 인덱스 재구성 주기

인덱스 재구성 주기는 데이터베이스의 사용량과 데이터 변경 빈도에 따라 달라지며,
일반적으로는 다음과 같은 기준을 권장합니다.

  • 단편화가 30% 이상일 경우 재구성
  • 데이터베이스에 큰 변경(대량 삽입/삭제 등)이 있을 때마다 인덱스를 점검하고 필요시 재구성

5. 인덱스 재구성의 장점과 단점

✅ 장점

  1. 성능 향상
    • 단편화를 해결하고, 검색 속도를 높여줍니다.
  2. 디스크 공간 절약
    • 불필요한 디스크 공간을 정리하고 최적화해 줍니다.

⚠️ 단점

  1. 리소스 소모
    • 인덱스 재구성은 CPU와 디스크 I/O를 많이 사용하기 때문에, 작업 중에 다른 쿼리 성능에 영향을 미칠 수 있으니 주의해야합니다.
  2. 긴 작업 시간
    • 특히 큰 테이블의 경우 재구성 작업이 오래 걸릴 수 있습니다.
profile
기록하는 블로그

0개의 댓글