Oracle SQL(11)

YangJiWon·2021년 1월 18일
0

DB

목록 보기
11/12

인덱스

  • 테이블에서 행을 검색할 때 검색 속도를 높이기 위해 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');

인덱스 적용 시점

인덱스를 사용해야 하는 경우인덱스를 사용하지 말아야 하는 경우
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 인덱스명;
profile
데이터데이터데이터!!

0개의 댓글