본문 바로가기
수업 내용/[DB] 오라클

[DB 오라클] 15. 인덱스 (INDEX)

by 프롯 2023. 4. 27.

인덱스

SQL 명령문의 처리 속도를 향상시키기 위해서 칼럼에 대해서 생성하는 오라클 객체

오라클에서의 인덱스는 원하는 데이터를 빨리 찾기 위해서 사용된다. (속도 개선)

 

장점

데이터가 많아질수록 속도가 빨라지고 부하를 줄여 성능 향상

 

단점

인덱스를 위한 추가적인 공간이 필요하고 인덱스를 생성하는데 시간이 걸린다.

데이터 변경 작업이 자주 일어날 경우에는 오히려 성능이 저하된다.

 

 

간단한 파트이니 바로 예제로 넘어가자

 

 

인덱스 확인

create table emp01
as
select * from emp;


--emp 와 emp01 테이블에 인덱스가 설정되어 있는지 확인.
SELECT TABLE_NAME, INDEX_NAME, COLUMN_NAME
FROM USER_IND_COLUMNS
WHERE TABLE_NAME IN('EMP', 'emp01');

결과

아직 emp01 이 나오지 않는다. (테이블 복사해도 제약조건은 복사 안됨)

 

속도 비교

 

인덱스 없는 테이블의 경우

insert into emp01 select * from emp01;
select *from emp01;

insert into emp01(empno, ename)
values(1111, '홍길동');

set timing on;

select distinct empno, ename
from emp01
where ename = '홍길동';

결과

위 정보를 검색하는데 0.058초가 걸린다.

 

 

 

인덱스 있는 테이블의 경우

create index idx_emp01_ename
on emp01(ename);
--Index IDX_EMP01_ENAME이(가) 생성되었습니다.

--경과 시간: 00:00:00.475

select distinct empno, ename
from emp01
where ename = '홍길동';

 결과

위 정보를 검색하는데 0.019초가 걸린다.

 

인덱스를 사용하는 경우가 더 빠른 것을 볼 수 있다.

인덱스 만드는 시간까지 하면 있는게 더 오래걸리는게 아닌가 싶을 수 있는데 자료가 많아지면 더 유효한 결과를 보일것이라 생각된다.

 

 

삭제하는 방법도 간단하다.

drop index idx_emp01_ename;

 

 

 

 

 

인덱스 사용 경우 판단

 

사용할 때

1. 테이블의 행의 수가 많을 때

2. where 문에 해당 컬럼이 많이 사용될 때

3. 검색 결과가 전체 데이터의 2% ~ 4% 정도 일때

3. join이 자주 사용되는 컬럼이나 null을 포함하는 컬럼이 많은 경우

 

 

사용하지 말아야 할 때

1. 테이블의 행의 수가 적을 떄

2. where문에 해당 컬럼이 자주 사용되지 않을 때

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

4. 테이블에 DML 작업이 많은 경우 (입력 수정 삭제 등이 자주 일어 날 때)

'수업 내용 > [DB] 오라클' 카테고리의 다른 글

[DB 오라클] 17. 롤(role)  (0) 2023.04.27
[DB 오라클] 16. 권한  (0) 2023.04.27
[DB 오라클] 14. 시퀀스  (0) 2023.04.27
[DB 오라클] 13. 뷰 ( view)  (0) 2023.04.27
12. 제약조건  (0) 2023.04.25