위로
아래
INDEX
--인덱스 기본형
CREATE INDEX[UNIQUE|BITMAP] index명
On 테이블명(column명[,column명]...);
--인덱스 생성
CREATE INDEX idx_tdept1_dept_name
ON tdept1(dept_name);
--인덱스 생성 유무 확인
SELECT index_name, table_name
FROM user_indexes
WHERE table_name = 'tdept1';
--인덱스 걸린 컬럼 확인
SELECT index_name,table_name, column_name
FROM user_ind_columns
WHERE table_name = 'TDEPT1';
--인덱스 삭제
DROP INDEX idx_tdept1_dept_name;
- DATABASE에서 원하는 내용의 Table을 검색할 때 보다 빠르게 검색할 수 있도록 도와주는 오브젝트
- DB의 성능을 향상시키고 ORW의 유일성을 보장하기 위해 사용
- 잘못된 INDEX의 사용은 오히려 데이터베이스의 성능을 저하시킨다.
생성기준
- 사용자의 SQL문에서 WHERE 조건절에 자주 사용되는 컬럼이 대상이 된다
- WHERE 조건에 의한 결과 컬럼의 분포도가 2~4%인경우(10%기준)
- 분포도가 범위 이상이라도 일부분의 데이터 검색이라면 적용할 수 있다.
- 작은 테이블보다는 큰 테이블에 인덱스를 생성한다
- 빈번하게 변경되지 않는 테이블에 적용
인덱스 생성을 삼가하는 경우
- 테이블에 행이 적은 경우
- 컬럼이 WHERE 조건에 자주 사용되지 않을 때
- WHERE 조건에 의한 결과가 전체 행에 대해 10~15%의 결과보다 높게 리턴될 때
- 테이블이 자주 입력, 수정, 삭제될 때(오히려 검색속도가 나빠질 수 있다)
인덱스 생성 방법
- 자동생성
- Unique INDEX로 PRIMARY KEY 또는 UNIQUE KEY Constraint 생성시 자동으로 만들어진다
- 테이블의 기본키나 유일키로 선언되어 있는 경우 인덱스가 자동생성되는 경우이므로 수동으로 인덱스를 생성할 경우 에러가 된다
- 수동생성
- NON-UNIQUE INDEX로 ACCESS시간을 향상시키기 위해 USER가 직접 생성
INDEX 종류
-- Single Index(단일 열 인덱스) : 하나의 컬럼으로 만들어지는 인덱스
CREATE INDEX I_EMP_ENAME ON EMP1(ENAME);
-- CONCANATED INDEX(복합 인덱스)는 2개 이상의 컬럼으로 만들어지는 인덱스
CREATE INDEX I_EMP_NO_NAME ON EMP1(EMPNO, ENAME);
-- UNIQUE INDEX(유일 인덱스)는 해당 컬럼에 입력되는 테이터가 중복된 값을 가지지 않는 컬럼의 인텍스
CREATE UNIQUE INDEX I_EMP_EMPNO ON EMP1(EMPNO);
-- NONUNIQUE-INDEX(비유일 인덱스)는 중복된 값이 입력되는 컬럼의 인덱스
CREATE INDEX I_EMP_ENMAE ON EMP(ENAME);
-- FUNCTION-BASED(함수기반)는 여러 개의 컬럼을 산술식을 실행한 결과로 인덱스 생성할 때
CREATE INDEX I_EMP_SAL_COM ON EMP(SAL-COMM);
예시
더보기
--테이블 생성
CREATE TABLE tdept2
AS SELECT * FROM tdept;
--단일 인덱스 생성
CREATE INDEX idx_tdept2_area
ON tdept2(area);
--유일 인덱스 생성
CREATE UNIQUE INDEX idx_tdept2_dept_code
ON tdept2(dept_code);
--복합 인덱스 생성
CREATE INDEX idx_tdept2_com
ON tdept2(dept_code, dept_name);
-- 데이터 사전을 통해 복합인덱스 확인
-- 같은 인덱스 이름으로 두 개의 컬럼이 만들어진 결과가 나온다
SELECT index_name, column_name
FROM user_ind_columns
WHERE table_name = 'TDEPT2';