본문 바로가기
Programming/Database

[Database] INDEX

by 공부합시다홍아 2023. 12. 13.
 

[Database] 시퀀스 , SEQUENCE

[Database] 뷰, VIEW [Database] 제약조건 [Database] Table, 테이블 [Database] 트랜잭션, Transaction https://hong-study.tistory.com/294 트랜잭션 ( Transaction ) ● 논리적인 작업의 단위로, 분리되어서는 안될 작업의 단위

hong-study.tistory.com


인덱스, 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