230812 TIL Chapter 25. DB VIEW , SEQUENCE , INDEX

최규연·2023년 8월 12일
0

TIL

목록 보기
27/57

DB 마지막!

VIEW

SELECT문의 실행 결과(RESULT SET)를 저장하는 객체
논리적 가상 테이블 -> 테이블 모양을 하고 있지만 실제로 값을 저장하고 있지는 않음.

VIEW 사용 목적

  1. 복잡한 SELECT문을 쉽게 재사용하기 위해서 사용.
  2. 테이블의 진짜 모습을 감출 수 있어 보안상 유리함.

VIEW 사용 시 주의사항

  1. 가상의 테이블(실제 테이블 X) -> ALTER 구문 사용 불가
  2. VIEW를 이용한 DML(INSERT/UPDATE/DELETE)가 가능한 경우도 있지만 많은 제약이 따르기 때문에 SELECT 용도로 사용 하는 것을 권장.

VIEW 생성 방법

CREATE [OR REPLACE] [FORCE | NOFORCE] VIEW 뷰이름 [(alias[,alias]...)]
AS subquery
[WITH CHECK OPTION]
[WITH READ ONLY];
  1. OR REPLACE 옵션 : 기존에 동일한 뷰 이름이 존재하는 경우 덮어쓰고, 존재하지 않으면 새로 생성.
  2. FORCE / NOFORCE 옵션
    -- FORCE : 서브쿼리에 사용된 테이블이 존재하지 않아도 뷰 생성
    -- NOFORCE : 서브쿼리에 사용된 테이블이 존재해야만 뷰 생성(기본값)
  3. WITH CHECK OPTION 옵션 : 옵션을 설정한 컬럼의 값을 수정 불가능하게 함.
  4. WITH READ ONLY 옵션 : 뷰에 대해 조회만 가능(DML 수행 불가)

SEQUENCE

순차적 번호 자동 발생기 역할의 객체

SEQUENCE 객체를 생성해서 호출하게되면 지정된 범위 내에서 일정한 간격으로 증가하는 숫자가 순차적으로 출력됨.

EX) 1부터 10까지 1씩 증가하고 반복하는 시퀀스 객체
	 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10

SEQUENCE는 주로 PK역할의 컬럼에 삽입되는 값을 만드는 용도로 사용
--> 인위적 주식별자

CREATE SEQUENCE 시퀀스이름
  [STRAT WITH 숫자] -- 처음 발생시킬 시작값 지정, 생략하면 자동 1이 기본
  [INCREMENT BY 숫자] -- 다음 값에 대한 증가치, 생략하면 자동 1이 기본
  [MAXVALUE 숫자 | NOMAXVALUE] -- 발생시킬 최대값 지정 (10의 27승 -1)
  [MINVALUE 숫자 | NOMINVALUE] -- 최소값 지정 (-10의 26승)
  [CYCLE | NOCYCLE] -- 값 순환 여부 지정
  [CACHE 바이트크기 | NOCACHE] -- 캐쉬메모리 기본값은 20바이트, 최소값은 2바이트
참고!!!

시퀀스의 캐시 메모리는 할당된 크기만큼 미리 다음 값들을 생성해 저장해둠
--> 시퀀스 호출 시 미리 저장되어진 값들을 가져와 반환하므로 
    매번 시퀀스를 생성해서 반환하는 것보다 DB속도가 향상됨.
SEQUENCE 사용법
1) 시퀀스명.NEXTVAL : 다음 시퀀스 번호를 얻어옴. (INCREMENT BY만큼 증가된 값)
                          단, 시퀀스 생성 후 첫 호출인 경우 START WITH의 값을 얻어옴.
    
2) 시퀀스명.CURRVAL : 현재 시퀀스 번호 얻어옴.
                          단, 시퀀스 생성 후 NEXTVAL 호출 없이 CURRVAL를 호출하면 오류 발생.

INDEX

SQL 명령문 중 SELECT의 처리 속도를 향상 시키기 위해 컬럼에 대해서 생성하는 객체
인덱스 내부 구조는 B* 트리 형식으로 되어있음.

인덱스 장점

  • 이진 트리 형식으로 구성되어 있어 자동 정렬 및 검색 속도가 빠름.
  • 조회 시 전체 테이블 내용을 조회하는 것이 아닌
    인덱스가 지정된 컬럼만을 이용해서 조회하기 때문에
    시스템 부하가 낮아져 전체적인 성능이 향상된다.

인덱스 단점

  • 데이터 변경(INSERT, UPDATE, DELETE) 작업 빈번한 경우 오히려 성능이 저하되는 문제가 발생.
  • 인덱스도 하나의 객체이다보니 이를 저장하기 위한 별도 공간.
  • 인덱스 생성 시간이 필요
[작성법]
CREATE [UNIQUE] INDEX 인덱스명
ON 테이블명 (컬럼명, 컬럼명, ... | 함수명, 함수계산식);

-- 인덱스가 자동으로 생성되는 경우
--> PK 또는 UNIQUE 제약조건이 설정되는 경우

0개의 댓글