인덱스, INDEX
● 테이블이나 클러스터에서 쓰이는 선택적인 객체이다.
● 오라클 데이터베이스 테이블내의 원하는 레코드를 빠르게 찾아갈 수 있도록 만들어진 데이터구조이다.
● 포인터를 사용하여 행의 검색을 촉진하기 위해 오라클 서버가 사용된다.
● 빠르게 데이터를 찾기 위해 빠른 경로 액세스 방법을 사용하여 디스크 I/O를 경감시킨다.
● 자동 인덱스는 PRIMARY KEY 또는 UNIQUE 제한 규칙에 의해 자동적으로 생성되는 인덱스들이다.
● 수동 인덱스는 CREATE INDEX 명령을 실행해서 만드는 인덱스들이다.
자동 인덱스
유일 인덱스는 테이블 정의의 PRIMARY KEY 또는 UNIQUE 키 제약조건을 정의할 때 자동 생성
수동 인덱스
사용자는 행에 대한 액세스 시간을 향상시키기 위해 열에서 유일하지 않은 인덱스를 생성
● 인덱스의 구조는 테이블과 독립적이므로 인덱스의 삭제는 테이블의 데이터에는 아무런 영향을 미치지 않는다.
● 인덱스 삭제 시 INDEX의 소유자이거나 [DROP ANY INDEX] 권한을 가져야 한다.
● INDEX는 ALTER 할 수 없다.
테이블의 많은 인덱스가 반드시 질의의 응답속도 향상을 의미하는 것이 아니다.
▶ 인덱스를 가지고 있는 테이블에 대한 각 DML 작업은 인덱스도 갱신되어야함을 의미한다.
인덱스는 다음 경우에 생성하는 것을 권장
■ 열이 WHERE 절 또는 조인 조건에서 자주 사용될 경우
■ 열이 광범위한 값을 포함할 경우
■ 열이 많은 수의 NULL 값을 포함할 경우
■ 둘 또는 이상의 열이 WHERE 절 또는 조인조건에서 자주 함께 사용될 경우
■ 테이블은 대형이고 대부분 질의가 행의 2~4% 보다 적게 읽을 것으로 예상할 경우
다음 경우네는 언제 인덱스를 생성하지 않기를 권장
■ 테이블이 작을 경우
■ 열의 질의의 조건으로 자주 사용되지 않을 경우
■ 대부분 질의가 행의 2~4% 이상 읽을 것으로 예상할 경우
■ 테이블은 자주 갱신될 경우 테이블에 하나 이상의 인덱스를 가지고 있다면 테이블을 액세스하는 DML문장은
인덱스의 유지 때문에 상대적으로 더 많은 시간이 걸리게 된다.
새로운 테이블 생성
CREATE TABLE EMPS_IT AS (SELECT * FROM EMPLOYEES);
● 테이블 내 'Nancy' 를 그냥 검색한다면 아래와 같이 많은 양의 작업내역을 확인할 수 있다.
SELECT * FROM EMPS_IT WHERE FIRST_NAME = 'Nancy';
● 인덱스 생성
CREATE INDEX EMPS_IT_IDX ON EMPS_IT(FIRST_NAME);
SELECT * FROM EMPS_IT WHERE FIRST_NAME = 'Nancy';
▶ 생성한 인덱스 EMPS_IT_IDX를 이용해 동일한 Nancy를 검색할 경우 아래와 같이 작업량이 현저하게 줄어든 것을 확인할 수 있다.
UNIQUE INDEX
● PRIMARY KEY 와 UNIQUE 제약 조건시 자동 생성된다.
● 중복된 값이 입력될 수 없다.
728x90
'Programming > Database' 카테고리의 다른 글
[Database] 데이터베이스 모델링 (0) | 2023.12.13 |
---|---|
[Database] 권한 ( Privilege ) (0) | 2023.12.13 |
[Database] 시퀀스 , SEQUENCE (0) | 2023.12.12 |
[Database] 뷰, VIEW (0) | 2023.12.12 |
[Database] 제약조건 (1) | 2023.12.12 |