# 인덱스 (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 : 시퀀스로부터 마지막 할당된 값 생성 (이전 생성한 값을 활용할 때 사용)
'IT ▶ > Database' 카테고리의 다른 글
데이터 분석 준전문가 (ADsP) ? (0) | 2020.05.02 |
---|---|
데이터베이스 계층검색(START WITH), 실행 계획(Execution plan) 분석 (0) | 2020.03.11 |
[Database] 데이터베이스 테이블 컬럼 추가, 삭제, 변경 방법 (0) | 2020.03.09 |
데이터베이스 비등가 조인, 등가 조인 (JOIN) / 트랜잭션 (Transaction) 개념 (0) | 2020.03.07 |
[Database] 데이터베이스 테이블 제약조건 PK, FK, UK 개념 (2) | 2020.03.07 |