Oracle Index란?

박현우·2024년 1월 19일
0

1. index
1-1. 인덱스란

  • 조회 속도를 향상시킥기 위한 데이터베이스 검색 기술
  • 색인이라는 뜻으로 해당 테이블의 조회 결과를 빠르게 하기 위해 사용한다.
  • 즉, 인덱스가 필요한 이유는 인덱스를 생성해 줌으로써 조회 속도를 빠르게 할 수 있기 때문.

1-2. 인덱스의 생성 원리

  • 인덱스를 테이블의 특정 컬럼에 한 개 이상 주게 되면 인덱스 테이블이 따로 만들어지고, 인덱스 컬럼의 로우값과 rowid값이 저장되며 로우값은 정렬된 트리 구조로 저장시켜 두었다가 검색시 좀 더 빠르게 해당 데이터를 찾는데 도움을 준다. (테이블을 생성학고 컬럼을 만든 후 데이터를 삽입하면 하나의 row가 생성되며 이 row는 절대적인 주소를 가지게되는데, 이를 rowid라고 한다)
  • 하지만 DML 명령을 사용할 때는 원본 TABLE은 물론 INDEX TABLE에도 데이터를 갱신해줘야 하기 때문에, update, insert, delete 명령을 쓸 때 속도가 느려진다.
  • 따라서 무조건 인덱스를 생성한다고 좋은 것만은 아니다. 꼭 필요할 때만 분별하게 생성해줘야 한다.

1-3. 인덱스 생성이 불필요한 경우

  • 데이터가 적은(수천건 미만) 경우에는 인덱스를 설정하지 않는 게 오히려 성능이 좋다.
  • 조회보다 삽입, 수정, 삭제 처리가 많은 테이블
  • 조회결과 전체 행의 15% 이상 읽어 들일 것으로 예상될 때

1-4. 인덱스 사용시 취약점

  • insert : 인덱스 split 현상으로 부하가 걸린다. block이 두 개로 갈라지는 현상
  • delete : 인덱스에서는 데이터를 사용하지 않음으로 표시하고 지우지 않는다.
  • update : 인덱스에서는 delete를 한 후에 새로운 데이터를 insert 작업을 한다.

1-5. index 생성

  • unique index : 인덱스를 사용한 컬럼의 중복값들을 포함하지 않고 사용할 수 있다.

    	create unique index 인덱스명
    	on 테이블명(컬럼);
  • not unique index: 인덱스를 사용한 컬럼에 중복 데이터 값을 가질 수 있다.

    	create index 인덱스명
    	on 테이블명(컬럼);

-- INDEX

CREATE TABLE EMPLOYEES3 
AS SELECT * FROM EMPLOYEES e 
;

SELECT rowid, EMPLOYEE_ID 
FROM EMPLOYEES3 e
;

-- 102 Lex De Haan LDEHAAN 515.123.4569 2001-01-13 00:00:00.000 AD_VP 17000 100 90

SELECT *
FROM  EMPLOYEES3 e 
ORDER BY EMPLOYEE_ID 
;

INSERT INTO EMPLOYEES3 e (employee_id, first_name, last_name)
VALUES (102, 'John', 'De Haan')
;

-- index 생성
-- employee_id, unique index
-- 에러 : SQL Error [1452][72000]: ORA-01452: cannot CREATE UNIQUE INDEX;
duplicate keys found
CREATE UNIQUE INDEX idx_employee3_id
ON employees3(employee_id);

CREATE INDEX idx_employee3_id
ON employees3(employee_id);

SELECT *
--DELETE 
FROM  EMPLOYEES3 e 
WHERE EMPLOYEE_ID = 102
AND   FIRST_NAME  = 'John'
;

0개의 댓글

관련 채용 정보