본문 바로가기
IT ▶/Data

[Database Index] 데이터베이스 인덱스, 뷰, 시퀀스 개념과 역할

by 오프로 2020. 3. 11.

 

 

 

 

# 인덱스 (Index)

 

 

- 테이블 검색 성능 향상을 제공하는 개체

 

- 테이블 전체를 검색하는 풀스캔을 하지 않고, 효율적으로 검색하기 위해 인덱스를 통해 필요한 정보를 빠르게 검색 가능

 

- 인덱스를 활용하기 위해서는 WHERE절 조건에서 인덱스 생성할 때 지정한 컬럼을 사용하여야 해당 인덱스 활용이 가능하다.

 

 

 

 

1> 인덱스 원리

 

 

- ‘등번호’ 컬럼으로 생성한 인덱스 (Index)

 

 

등번호 ROWID
01 AAAAqA2TebAAAAA
02 AAAAqA2TebAAAAB
03 AAAAqA2TebAAAAC
04
05
06
07

 

 

 

 

- 해당 등번호 컬럼을 통해 SELECT 조회를 하면 해당 인덱스의 ROWID를 찾아 빠르게 조회를 한다.

 

 

SELECT *
FROM 팀테이블
WHERE 등번호 = ‘03’;

 

 

등번호 팀선수 포지션
01 Buffon GK
02 Terry DF
03 Hill DF
04
05
06
07

 

 

 

 

 

2> 인덱스 종류

 

 

- 비고유 인덱스 (Non Unique Index) : 중복 값 허용, 수동 생성

 

- 고유 인덱스 (Unique Index) : 중복 값 불가, PK or UK 컬럼으로 자동 생성

 

 

 

 

 

3> 인덱스 생성 및 삭제

 

 

<인덱스 생성>

 

CREATE INDEX 인덱스명
ON 테이블명 (컬럼 | 함수 | 수식); 

 

예시>

CREATE INDEX team_Idx

ON player (name);

 

 

- 컬럼 여러 개 지정 가능

 

- 함수를 인덱스로 생성 가능

 

 

 

<인덱스 삭제>

 

DROP INDEX 인덱스명; 

 

 

 

 

4> 인덱스 생성 조건

 

 

- 최소 수십만 ~ 수천만 이상 데이터 크기

 

- 조건과 조인에 자주 사용하는 컬럼으로 생성

 

- 검색 한 결과가 테이블의 5% 이만 정도 검색이 효율적

 

- 카디널리티가 높은 경우 생성

 

 

 

 

 

 

# 뷰 (View)

 

 

- 하나의 테이블 또는 여러 테이블에 논리적인 부분집합

 

- 뷰 통해 테이블 정보 접근 (보안 역할)

 

- 장점 : 원하는 조건으로 조회한 결과를 뷰로 만들어서 해당 뷰를 SELECT 하면 복잡한 조건절 없이 단순하게 SELECT 쿼리로 조회가 가능하다.

 

 

 

 

1> 뷰 종류

 

 

-   단순 뷰 (Simple View) : 단일 테이블, 단순 컬럼 (함수, 수식 X), DML문장 수행

 

-   복합 뷰 (Complex View) : 다중 테이블, 함수, 수식 포함, DML문장 수행 불가X

 

 

 

 

 

2> 뷰 생성 (CREATE VIEW)

 

 

CREATE [OR REPLACE] [FORCE | NOFORCE] VIEW 뷰이름 (컬럼..)
AS (SELECT ~ )
[WITH CHECK OPTION [CONSTRAINT 제약조건명]]
[WITH READ ONLY [CONSTRAINT 제약조건명]]
;

 

 

-   OR REPLACE : 동일한 뷰 명칭을 삭제하고 새로 생성 (ALTER VIEW)

 

-   FORCE : 기반 테이블 없이 뷰 생성 (default NOFORCE)

 

-   WITH CHECK OPTION : 뷰 검색 행만 DML 작업 가능

 

-   WITH READ ONLY : 뷰를 통해서 SELECT 만 가능 (**보안상 기본 옵션으로 설정하는 것이 좋음.)

 

 

 

3> 뷰 조회

 

 

SELECT view_name FROM user_views;

 

 

 

 

 

# 시퀀스 (Sequence)

 

 

 

-   숫자 제공 객체

 

-   중복을 피하기 위해 뭔가 순서가 필요한 경우 시퀀스를 생성하여 고유한 값으로 처리하기

 

 

 

1> 시퀀스 생성

 

 

CREATE SEQUENCE 시퀀스명

[START WITH 시작값

INCREMENT BY 증가값

MAXVALUE [최대값 | NOMAXVALUE]

MINVALUE [최소값 | NOMINVALUE]

CYCLE | NOCYCLE

CACHE [cache개수 | NOCACHE]]

;

 

 

-   자동으로 유일한 값 생성

 

-   START WITH : 시작되는 값으로 미지정하면 MINVALUE 값으로 할당

 

-   INCREMENT BY : 생성값의 증가치 결정 (미지정하면 1에서 시작)

 

-   MAXVALUE : 최대값 정의 (기본은 NOMAXVALUE)

 

-    MINVALUE : 최소값 정의 (기본은 NOMINVALUE)

 

-   CYCLE : 최대값 생성 이후 다시 최소값부터 재생성 할지 정의

(기본은 NOCYCLE : 최대값까지 생성되면 더 이상 생성X)

 

- CACHE : 메모리에 생성될 값 개수 정의 (기본은 20)

 

 

 

2> 시퀀스 변경

 

 

ALTER SEQUENCE 시퀀스명

INCREMENT BY 증가값

MAXVALUE [최대값 | NOMAXVALUE]

MINVALUE [최소값 | NOMINVALUE]

CYCLE | NOCYCLE

CACHE [cache개수 | NOCACHE]]

 

 

- 시퀀스 설정 값을 변경하며, 시작 값인 START WITH 값은 변경 불가

 

 

 

3> 시퀀스 삭제

 

DROP SEQUENCE 시퀀스명 

 

 

 

4> 시퀀스 할당

 

 

-   시퀀스명.NEXTVAL : 시퀀스로부터 유일한 값 생성

 

-   시퀀스명.CURRVAL : 시퀀스로부터 마지막 할당된 값 생성 (이전 생성한 값을 활용할 때 사용)

 

 

 

 

728x90
300x250