-- 1. 조회를 빠르게 하는 인덱스
-- 2. 인덱스 생성
-- 3. 인덱스 제거
-- 4. 인덱스로 성능 향상하기
-- 5. 인덱스의 종류
-- 인덱스를 왜 사용하는가?
-- 빠른 검색을 위해 사용한다.
-- 책 맨 뒤에 있는 색인(인덱스, 찾아보기)에서 해당 단어(테이블)을 찾아 그 페이지로 이동합니다.
-- 원하는 단어를 쉽게 찾는 방법으로 색인, 인덱스가 사용되는 것처럼
-- 오라클의 인덱스 역시 원하는 데이터를 빨리 찾기 위해 사용된다.
-- 인덱스란 SQL 명령문의 처리 속도를 향상시키기 위해서 컬럼에 대해서 생성하는 오라클 객체입니다.
-- 01. 인덱스의 사용 용도와 장단점
-- 인덱스의 장점
-- 검색 속도가 빨라진다.
-- 시스템에 걸리는 부하를 줄여서 시스템 전체 성능을 향상시킨다.
-- 인덱스 단점
-- 인덱스를 위한 추가적인 공간이 필요하다.
-- 인덱스를 생성하는데 시간이 걸린다.
-- DML 데이터의 변경 작업(INSERT/UPDATE/DELETE)이 자주 일어날 경우에는 오히려 성능이 저하된다.
-- <실습하기> 인덱스 관련 데이터 딕셔너리
-- 1. USER_IND_COLUMNS 데이터 딕셔너리 뷰로 인덱스의 생성 유무를 확인해 봅시다.
select index_name, table_name, column_name
from user_ind_columns
where table_name in('ENP', 'DEPT');
-- 1.1 인덱스 정보 조회
-- 오라클은 기본 키나 유일 키에 대해서 자동으로 인덱스를 생성한다.
-- 테이블이나 뷰나 시퀀스와 같이 오라클 객체의 일종이고 모든 객체들은 이름이 있어야 한다.
-- 자동으로 생성되는 인덱스 이름은 제약조건명을 사용한다.
-- 1.2 조회 속도 비교하기.
-- 인덱스 생성하면 더 빨라짐(요약) ㅋㅋㅋㅋ
-- 02. 인덱스 생성하기 (기본형식)
-- CREATE INDEX index_name
-- ON table_name (column_name);
create index index_emp01_ename
on emp01(ename);
-- 03. 인덱스 제거하기
-- DROP INDEX index_name;
-- 인덱스를 사용해야 하는 경우
-- 테이블에 행의 수가 많을때
-- WHERE 문에 해당 컬럼이 많이 사용될 때
-- 검색 결과가 전체 데이터의 2%~4%정도 일 때
-- JOIN에 자주 사용되는 컬럼이나 NULL을 포함하는 컬럼이 많은 경우
-- 인덱스를 사용하지 말아야 하는 경우
-- 테이블 행의 수가 적을 때
-- WHERE 문에 해당 컬럼이 자주 사용되지 않을 때
-- 검색 결과가 전체 데이터의 10%~15% 이상 일 때
-- 테이블에 DML 작업이 많은경우
-- 03. 인덱스 물리적인 구조와 인덱스의 재생성
-- DELETE 명령을 수행한 경우에는 해당 인덱스 엔트리가 논리적으로만 제거 되고
-- 실제 인덱스 엔트리는 그냥 남아 있게 됩니다.
-- 인덱스에 제거된 엔트리가 많아질 경우에는 제거된 인덱스들이 필요 없는 공간을
-- 차지하고 있기 때문에 종종 인덱스를 재생성시켜야 합니다.
-- 인덱스를 재생성할 때 사용하는 기본 형식
alter index idx_emp01_deptno rebuild;
-- 4.1 비 고유 인덱스
-- 중복된 데이터를 갖는 컬럼에 대해서 인덱스를 생성하는 경우
-- 고유 인덱스를 설정하려면 UNIQUE 옵션을 추가해서 인덱스를 생성해야 한다.
create unique index index_name
on table_name(column_name);
-- 정리. 데이터가 중복되지 않을 경우 -> 고유 인덱스 사용
-- 데이터가 중복될 경우 -> 비 고유 인덱스 사용
-- 4.2 결합 인덱스
-- 두개 이상 컬럼으로 인덱스를 구성하는 것을 결합 인덱스라고 한다.
create index idex_dept01_com
ON dept01(deptno, dname);
-- 4.3 함수 기반 인덱스
-- 1. 함수 기반 인덱스를 생성해 봅시다.
create index idx_emp01_annsal
on emp01(sal*12);
-- 2. 다음은 데이터 딕셔너리인 USER_IND_COLUMNS에 함수 기반 인덱스가 기록
-- 되이 있는 것을 확인하기 위한 쿼리문입니다.
select index_name, column_name
from user_ind_columns
where table_name='emp01';
'Study > OracleDB' 카테고리의 다른 글
Oracle Day2 (0) | 2022.09.29 |
---|---|
Oracle Day1 (2) | 2022.09.28 |
35강 오라클 시퀀스 (1) | 2022.09.12 |
34강 오라클 가상 테이블인 view (1) | 2022.09.12 |
33강 오라클 데이터 무결성을 위한 제약 조건 (4) | 2022.09.12 |