OracleDB - VIEW, SEQUENCE, INDEX

📘 VIEW

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

📜 VIEW 사용 목적

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

📜 VIEW 사용 시 주의사항

1) 가상의 테이블(실체 X)이기 때문에 ALTER 구문 사용이 불가능하다.
2) VIEW를 이용한 DML(INSERT, UPDATE, DELETE)가 가능한 경우도 있지만
   제약이 많이 따르기 때문에 보통은 조회(SELECT) 용도로 많이 사용한다.
3) VIEW를 이용한 INSERT 시 원본 테이블에 삽입이 된다.
   원본테이블 삽입 시 VIEW INSERT 구문에 미포함된 컬럼에는 NULL이 저장된다.
   그런데 DEPT_TITLE 컬럼에 NOT NULL 제약조건이 설정되어 있다.
   오류 발생! -> VIEW를 이용한 INSERT 실패

!! 결론 : VIEW에서 웬만하면 DML을 사용하지 말것!! !!

✏ VIEW 작성법

CREATE [OR REPLACE] [FORCE | NOFORCE] VIEW 뷰이름 [(alias[,alias]...] AS subquery
[WITH CHECK OPTION] 
[WITH READ ONLY];

✏ 여러 옵션

OR REPLACE 옵션

-> 기존에 동일한 뷰 이름이 존재하는 경우 덮어쓰고, 존재하지 않으면 새로 생성한다.

FORCE / NOFORCE 옵션

FORCE : 서브쿼리에 사용된 테이블이 존재하지 않아도 뷰 생성
NOFORCE : 서브쿼리에 사용된 테이블이 존재해야만 뷰 생성(기본값)

WITH CHECK OPTION 옵션

-> 옵션을 설정한 컬럼의 값을 수정 불가능하게 한다.

WITH READ ONLY 옵션

-> 뷰에 대해 조회만 가능(DML 수행 불가)


📘 SEQUENCE(순서, 연속)

  • 순차적 번호 자동 발생기 역할의 객체
    EX) 1 2 3 4 5 6 7 8 9 .....

📜 SEQUENCE를 사용하는 방법

PRIMARY KEY 컬럼에 사용될 값을 생성하는 용도로 사용한다!!

1) 시퀀스명.NEXTVAL : 다음 시퀀스 번호를 얻어온다. (INCREMENT BY 만큼 증가된 값)
   단, 시퀀스 생성 후 첫 호출인 경우 START WITH의 값을 얻어온다.
2) 시퀀스명.CURRVAL : 현재 시퀀스 번호 얻어온다.
   단, 시퀀스 생성 후 NEXTVAL 호출 없이 CURRVAL를 호출하면 오류 발생

✏ SEQUENCE 작성법

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

✏ SEQUENCE 변경 (ALTER)

ALTER SEQUENCE 시퀀스이름
  [STRAT WITH 숫자] -- 처음 발생시킬 시작값 지정, 생략하면 자동 1이 기본
  [INCREMENT BY 숫자] -- 다음 값에 대한 증가치, 생략하면 자동 1이 기본
  [MAXVALUE 숫자 | NOMAXVALUE] -- 발생시킬 최대값 지정 (10의 27승, -1)
  [MINVALUE 숫자 | NOMINVALUE] -- 최소값 지정 (-10의 26승)
  [CYCLE | NOCYCLE] -- 값 순환 여부 지정
  [CACHE 바이트크기 | NOCACHE] -- 캐쉬메모리 기본값은 20바이트, 최소값은 2바이트
  • 시퀀스 변경 시 시작 번호는 변경할 수 없다.
  • 시퀀스를 잘못 다루어서 번호가 공백이 있어서 다시 처음부터 시작하고 싶은 경우
    -> 시퀀스 삭제 후 재생성

📘 INDEX(색인)

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

📜 INDEX의 장단점

  • 인덱스 장점

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

    • 데이터 변경(INSERT, UPDATE, DELETE) 작업 빈번한 경우 오히려 성능이 저하되는 문제가 발생한다.
    • 인덱스도 하나의 객체이다보니 이를 저장하기 위한 별도 공간이다.
    • 인덱스 생성 시간이 필요하다.

    ✏ INDEX 작성법

CREATE [UNIQUE] INDEX 인덱스명
ON 테이블명 (컬럼명, 컬럼명, ... | 함수명, 함수계산식);
  • 인덱스가 자동으로 생성되는 경우
    -> PK 또는 UNIQUE 제약조건이 설정되는 경우

좋은 웹페이지 즐겨찾기