인덱스
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');
결과

속도 비교
인덱스 없는 테이블의 경우
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 = '홍길동';
결과

인덱스 있는 테이블의 경우
create index idx_emp01_ename
on emp01(ename);
--Index IDX_EMP01_ENAME이(가) 생성되었습니다.
--경과 시간: 00:00:00.475
select distinct empno, ename
from emp01
where ename = '홍길동';
결과

인덱스를 사용하는 경우가 더 빠른 것을 볼 수 있다.
인덱스 만드는 시간까지 하면 있는게 더 오래걸리는게 아닌가 싶을 수 있는데 자료가 많아지면 더 유효한 결과를 보일것이라 생각된다.
삭제하는 방법도 간단하다.
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 |