71. [SQL]_(10) VIEW, SEQUENCE, INDEX

hyunsoda·2024년 3월 13일

DB

목록 보기
11/11
post-thumbnail

👀VIEW

  • SELECT 쿼리의 실행 결과를 화면에 저장한 논리적 가상 테이블
  • 실제 테이블과는 다르게 실질적 데이터를 저장하고 있진 않지만 사용자는 테이블을 사용하는 것과 동일하게 사용 가능
  • 논리적 가상 테이블

테이블 모양을 하고는 있지만, 실제로 값을 저장하고 있지는 않음

VIEW 사용 목적

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

VIEW 사용 시 주의사항

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

[VIEW 생성 방법]
CREATE [OR REPLACE][FORCE | NOFORCE] VIEW 뷰이름
AS SUBQUERY(만들고 싶은 뷰 모양의 SUBQUERY)
[WITH CHECK OPTION][WITH READ ONLY];

VIEW 옵션

1) OR REPLACE : 기존에 동일한 뷰이름이 존재하는 경우 덮어쓰고, 존재하지 않으면 새로 생성

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

3) WITH CHECK OPTION : 옵션을 설정한 컬럼의 값을 수정 불가능하게 함.

4) WITH READ ONLY : 뷰에 대한 조회만 가능 (DML 수행 불가)

INLINE VIEW

  • 일반적으로 FROM절에 사용된 서브쿼리의 결과 화면에 별칭을 붙인 것을 말함
  • FROM절에 서브쿼리를 직접 사용해도 되고 따로 뷰를 생성 후 FROM절에 생성한 뷰를 사용해도 됨

SEQUENCE

  • 순차적으로 정수 값을 자동으로 생성하는 객체로 자동 번호 발생기 역할을 함
  • SEQUENCE 객체를 이용해서 호출하게 되면
    지정된 범위 내에서 일정한 간격으로 증가하는 숫자가
    순차적으로 출력됨

SEQUENCE는 주로 PK 역할의 컬럼에 삽입되는 값을 만드는 용도로 사용

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

  • 시퀀스의 캐시메모리는 할당된 크기만큼 미리 다음값들을 생성해 저장해둠
  • 시퀀스 호출 시 미리 저장되어진 값들을 가져와 반환하므로 매번 시퀀스를 생성해서 반환하는 것보다 DB속도가 향상됨

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


옵션 없이 SEQUENCE 생성
범위 : 1 ~ 최대값
시작 : 1
반복 X (NOCYCLE)
캐시메모리 20BYTE (기본값)

CURRVAL 주의사항

  • CURRVAL는 마지막 NEXTVAL 호출 값을 다시 보여주는 기능
  • NEXTVAL를 먼저 호출해야 CURRVAL 호출이 가능하다!

SEQUENCE 수정

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

INDEX (색인)

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

인덱스 장점

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

인덱스 단점

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

인덱스 생성 방법
[작성법]
CREATE INDEX 인덱스명
ON 테이블명 (컬럼명, 컬럼명, ...)

인덱스가 자동으로 생성되는 경우

➡️ PK 또는 UNIQUE 제약조건이 설정되는 경우

인덱스를 이용한 검색 방법

WHERE 절에 인덱스가 지정된 컬럼을 언급하면 된다.

0개의 댓글