Oracle SQL(11)
인덱스
- 테이블에서 행을 검색할 때 검색 속도를 높이기 위해 Oracle 서버가 사용하는 스키마 객체이다.(데이터의 실제 저장위치인 ROWID를 저장하고 관리함)
- 인덱스가 없으면 테입르의 모든 데이터를 읽어 데이터를 선별한다.
- 인덱스를 사용하면 디스크의 I/O를 감소시킬 수 있다.
- 해당 테이블과 논리적으로 독립적이다.
- 테이블을 삭제하면 인덱스도 같이 삭제된다.
인덱스 생성
--문법
CREATE [UNIQUE] INDEX 인덱스명
ON 테이블( 컬럼 [, 컬럼]);
CREATE INDEX emp_ename_idx
ON emp(ename);
- CREATE UNIQUE INDEX 문으로 생성한 인덱스를 UNIQUE 인덱스라고 하고 인덱스 내의 key 컬럼 값에 중복되는 데이터가 없는 인덱스를 의미한다.
생성된 인덱스 확인하는 방법
SELECT index_name, table_name
FROM user_indexes
WHERE table_name IN ('EMP', 'DEPT');
--EMP와 DEPT의 인덱스를 확인할 수 있다.
어떤 컬럼에 인덱스가 지정되었는지 확인하는 방법
SELECT index_name, table_name, column_name
FROM user_ind_columns
WHERE table_name IN ('EMP', 'DEPT');
--문법
CREATE [UNIQUE] INDEX 인덱스명
ON 테이블( 컬럼 [, 컬럼]);
CREATE INDEX emp_ename_idx
ON emp(ename);
생성된 인덱스 확인하는 방법
SELECT index_name, table_name
FROM user_indexes
WHERE table_name IN ('EMP', 'DEPT');
--EMP와 DEPT의 인덱스를 확인할 수 있다.
어떤 컬럼에 인덱스가 지정되었는지 확인하는 방법
SELECT index_name, table_name, column_name
FROM user_ind_columns
WHERE table_name IN ('EMP', 'DEPT');
인덱스 적용 시점
인덱스를 사용해야 하는 경우 | 인덱스를 사용하지 말아야 하는 경우 |
---|---|
1. 테이블에 데이터가 많을 때 2.컬럼 값의 범위가 넓은 컬럼인 경우 3.WHERE절 또는 JOIN문에 사용되는 컬럼 4.검색 결과가 전체 데이터의 2~4% 이내를 검색하는 경우 5.NULL을 포함하는 컬럼이 많은 경우 | 1.테이블에 데이터가 적을 때 2.WHERE 문에 해당 컬럼이 자주 사용되지 않을 때 3.검색 결과가 전체 데이터의 10~15%이상을 검색하는 경우 4.테이블에 DML작업이 많은 경우 5.인덱스가 적용된 컬럼이 함수 및 NOT 연산자와 같이 사용되는 경우 |
-- 인덱스가 적용되지 않은 Table Full Scan방식으로 사원 정보가 검색된다.
SELECT *
FROM emp
WHERE TO_NUMBER(empno) = 7369;
-- 7369가 아닌 행들은 많으므로 인덱스가 적용되지 않고 Table Full Scan 방식으로 사원 정보를 검색한다.
SELECT *
FROM emp
WHERE empno != 7369;
인덱스 삭제
DROP INDEX 인덱스명;
Author And Source
이 문제에 관하여(Oracle SQL(11)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@sparkbosing/Oracle-SQL11저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)