인덱스
빠른 검색을 위해 컬럼에 대해 생성하는 객체
지금까지 한번도 인덱스를 생성한 적이 없지만 목록을 불러와보면 여러가지 인덱스가 생성되어 있다.
이는 테이블 생성 시 Primary Key 컬럼이 존재하면 자동으로 고유 인덱스가 생성되기 때문이다.
select*from user_indexes;
인덱스 사용 유무에 따른 검색 속도의 차이
1) 실습용 테이블을 생성한다.
emp 테이블을 복사한 emp01 테이블 생성.
서브 쿼리를 이용하여 데이터는 그대로 복사했으나 제약 조건은 복사되지 않았다.
primary key 가 없으니 고유 인덱스도 생성되지 않은 상태.
2) 인덱스 기능을 사용해보기 위해 많은 중복 데이터를 입력하고, 검색용 데이터를 임의로 두 개 추가함.
3) 인덱스가 설정되지 않은 상태에서는 특정 데이터를 찾는데에 0.786초가 소요되었다.
(소요시간은 컴퓨터의 사양에 따라 다르다)
4) 인덱스를 특정 컬럼에 적용해본다.
16초가 소요됐다.
인덱스를 생성하는데에도 오랜 시간이 소요된다.
(노트북 너무 뜨겁다.)
형식:
create index 인덱스명 on 테이블(컬럼)
create index idx_emp01_ename on emp01(ename);
5) 인덱스가 잘 생성됐는지 확인해본다.
emp01 테이블에 primary key가 없기 때문에 Uniqueness를 보면
다른 테이블과 다르게 NONUNIQUE 상태로 되어 있다.
6) 인덱스가 설정된 컬럼의 데이터를 검색해본다
검색 시간이 확연히 차이난다.
인덱스 제거
drop index 인덱스명;
drop index idx_emp01_ename;
인덱스의 종류
고유 인덱스 (Unique Index) |
중복된 데이터를 저장할 수 없는 컬럼에 적용 가능 |
비 고유 인덱스 (Non Unique Index) |
중복된 데이터 저장 가능한 컬럼에 적용 가능 |
이 외에도 단일 인덱스, 결합 인덱스, 함수 기반 인덱스가 있다.
고유 인덱스 실습
1) 실습용 테이블을 생성한다.
dept의 데이터는 가져오지 않고 구조만 그대로 복사해 온다.
2) 다음과 같은 데이터를 입력하였다.
deptno, dname : 중복 없음
loc : 중복 있음
3) 고유 인덱스 생성
중복 데이터가 없는 컬럼에 생성 가능하다.
처음 테이블을 생성할 때에는 테이블 구조를 그대로 복사했기 때문에
dept01에는 아무런 제약조건이 없었지만,
고유 인덱스를 설정한 이후로는 중복 데이터가 입력되지 않는다.
이 인덱스는 부서 번호에 적용하였다.
형식 : create unique index 인덱스명 on 테이블명(컬럼);
create unique index idx_dept01_deptno on dept01(deptno);
4) 고유 인덱스를 설정한 부서 번호 컬럼에 중복 데이터 입력을 시도해본다.
5) 중복 데이터가 있는 loc 컬럼에 고유 인덱스를 적용해본다.
오류가 난다.
6) 중복 데이터가 있는 loc 컬럼에 비고유 인덱스를 적용해본다.
잘 생성된다.
지금까지 실습한 단일 컬럼으로 만들어진 인덱스를 단일 인덱스라고 부른다.
2개 이상의 컬럼으로 이루어진 결합 인덱스를 생성해 보았다.
그 외에도 수식이나 함수를 적용하여 만든 함수 기반 인덱스가 있다.
다음과 같이 생성할 수 있다.
'오라클 데이터베이스' 카테고리의 다른 글
DCL> 롤 권한 제어 (0) | 2022.07.29 |
---|---|
DCL> 사용자 관리와 Grant, Revoke (0) | 2022.07.29 |
시퀀스 Sequence (0) | 2022.07.29 |
가상 테이블 뷰 View (0) | 2022.07.28 |
무결성 제약 조건 (0) | 2022.07.27 |