Practice makes perfect

[DataBase] 인덱스(Index) 본문

빅데이터/DataBase

[DataBase] 인덱스(Index)

kerpect 2020. 4. 14. 22:00

인덱스 = sql 명령문의 처리 속도를 향상시키기 위해서 컬럼에 생성하는 오라클 객체로서 빠른 검색을 위한 용도로 사용합니다.

 

인덱스 장점 vs 단점

 

 ● 장점

 

• 검색 속도를 빨라지게 합니다. 

• 시스템에 걸리는 부하를 줄여서 시스템 전체 성능을 향상시킵니다.

아무리 많은 데이터가 되어 있더라도 데이터베이스가 빠르게 진행시킨다.

 

 ● 단점

 

• 인덱스를 위한 추가적인 공간이 필요합니다.

• 인덱스를 생성하는데 시간이 걸립니다.

• 데이터의 변경 작업(insert/update/delete)이 자주 일어날 경우에는 오히려 성능이 떨어집니다.

 

 - 결과적으로 성능을 위해서는 필수적인 기능이라고 할 수 있습니다. 데이터의 온전성을 유지하기 위해서 단점이 있음에도 장점이 더 크기 때문에 사용되고 있다고 생각하시면 됩니다.

 

1) 인덱스 정보 조회하기

select index_name, table_name, column_name 
from user_ind_columns
where table_name in('EMP', 'DEPT');

 

2) 조회 속도 비교하기

select distinct empno, ename 
from emp01
where ename = 'ANGEL'; -- 1.324초(INDEX 연결x)


select distinct empno, ename 
from emp01
where ename = 'ANGEL';  -- index 생성 이후 1.324초 에서 0.213초 로 줄어들었다. 

 

3) 인덱스 생성

기본키나 유일키가 아닌 컬럼에 대해서 인덱스를 지정하려면 create index  명령어를 사용.
create index idx_emp01_ename
on emp01(ename);  
-- index 를 만들어서 emp01에 연결 시키는 것입니다. / index 생성 시간은 오래 걸립니다. 46.762초

 

4) 인덱스 제거

drop index idx_emp01_ename;

 

                      인덱스 사용이 효과젹일 때

                      인덱스 사용이 불필요할 때

테이블에 행의 수가 많을 때

테이블 행의 수가 적을 때

where 절/ 외래키 / order by 에 해당 컬럼이 많이 사용될 때

True, False 값을 가지는 컬럼처럼 중복도가 높은 컬럼일때

검색 결과가 전테 데이터의 2~4%

검색 결과가 전체 데이터의 10~15% 이상일 때

join에 자주 사용되는 컬럼, null을 포함하는 컬럼이 많을 떄

select, insert, update 등 변동 작업이 많을 때