본문 바로가기
서버/DB

오라클에서 인덱스가 없는 테이블에 인덱스 생성하기 (인덱스 생성을 빠르게)

by 아카이sun 2020. 11. 9.

어느날 고객으로부터 화면 조회가 느리다는 이야기를 들었다.

 

확인해 보니 해당 화면은 A라는 테이블을 사용 중 이었고 해당 테이블에는 인덱스가 없었다.

 

A라는 테이블에는 약 3억건의 데이터가 있었다.

 

단순 SELECT조회도 느렸고 FULL PARALLEL의 힌트를 줘도 느렸다.

 

그래서 인덱스를 생성하게 되었는데.

 

두가지의 방법을 생각해 보았다.

 

1. 먼저 TEMP테이블을 생성 후 인덱스를 생성한 뒤 기존의 테이블의 데이터를 SELECT 후 INSERT하는 방법. 그리고 기존 테이블은 지우고 TEMP 테이블을 기존 테이블명으로 변경한다.

 

2. 기존 테이블에 CREATE INDEX를 이용하여 생성한다.

 

3억건이나 되는 테이블이니 당연히 1번이 빠를 거라고 생각하였지만 보통 귀찮은 일이 아니다.

그래서 찾아보니 2번의 방식에 PARALLEL을 주면 빨라진다는 글을 보았다.

 

다음과 같이 인덱스를 생성해 보았다.

CREATE INDEX {인덱스명} ON {테이블명(컬럼명)} NOLOGGING PARALLEL 8;

DB가 워낙 좋아서 였을까?

 

몇시간 걸릴 것이라는 예상과는 달리 30분만에 생성되었다. 올레~~

 

여기서 생성 후 주의사항이 있다.

 

기존 NOLOGGING 과 PARALLEL을 원래 설정대로 변경하자.

ALTER INDEX {인덱스명} LOGGING;
ALTER INDEX {인덱스명} PARALLEL 1;

 

이렇게 변경해 주지 않으면 해당 인덱스를 사용하는 컬럼 조회시 PARALLEL로 수행되어 시스템 부하가 발생할 수 있다고

한다.

댓글