[DBMS] 뷰 / 시퀀스 / 인덱스

형이·2023년 7월 26일
0

DBMS

목록 보기
17/17
post-thumbnail

📝 VIEW / Sequence / Index

🖥️ 1. 뷰(View)

  • 하나의 가상 테이블
  • 작업을 하다 보면 자주 조회하는 데이터들이 있는데, 한 테이블에 데이터가 있으면 조회하기 편하겠지만 그렇지 않은 경우가 있다. 여러 테이블을 join 사용하여 가져오고 쿼리가 복잡한 경우도 있다. 이러한 경우 쿼리로 뷰를 만들어 놓고 사용하면 편리하다.
  • 뷰는 보안에 유리
  • 테이블에 데이터를 노출시키고 싶지 않을 때, 뷰를 사용하여 보여줄 데이터만 뷰로 제공할 수 있다.

1-1. 뷰(view)의 특징

  • 원천데이터가 변경되면 view 데이터도 자동 변경
  • 뷰의 검색은 자유로우나 삽입 / 수정 / 삭제는 제약이 있다.
  • 뷰생성 쿼리에 함수를 사용하면 반드시 alias를 지정
  • view는 table과 유사하며, 테이블처럼 사용한다.
  • 테이블과는 달리 데이터를 저장하기 위한 물리적인 공간이 필요하지 않은 가상 테이블이다.
  • 데이터를 물리적으로 갖지 않지만, 논리적인 집합을 갖는다.
  • 테이블과 마찬가지로 select, insert, update, delete 명령이 가능하다.

1-2. 뷰(view) 생성 예시

  CREATE VIEW v_emp(emp_id,first_name,job_id,hiredate,dept_id)
  AS
  SELECT 	EMPLOYEE_ID , FIRST_NAME 
      , 	JOB_ID , HIRE_DATE , DEPARTMENT_ID 
  FROM 	EMPLOYEES e 
  WHERE 	JOB_ID = 'ST_CLERK'
  ;
  CREATE OR REPLACE VIEW v_emp2(
      emp_id, first_name, job_id, hiredate, dept_id
  ) AS 
  SELECT 	NVL(EMPLOYEE_ID, ''), FIRST_NAME  , JOB_ID 
      ,	HIRE_DATE , DEPARTMENT_ID 
  FROM 	EMPLOYEES e 
  ;

🖥️ 2. 시퀀스 (Sequence)

2-1. 시퀀스(sequence)란

  • 연속적으로 번호를 만들어주는 기능
  • 시퀀스란 자동으로 순차적으로 증가하는 순번을 반환하는 데이터베이스 객체이다. 보통 PK값에 중복값을 방지하기 위해 사용한다.

2-2. 시퀀스 생성

구분내용
create sequence시퀀스 이름
increament by n증가값을 설정, ex) 2 -> 2씩 증가
start with n시작 값
maxvalue n최대값 (nomaxvalue는 최대값 없이 계속 증가)
minvalue n최소값 (nominvalue는 최소값이 없다는 의미, cycle 옵션일 경우)
cycle시퀀스를 순 사용할지를 결정 (nocycle)
cache n시퀀스의 속도를 개선하기 위해 캐싱 여부 지정 (nocache)

2-3. 시퀀스 생성 예시

    CREATE SEQUENCE seq_serial_no
    INCREMENT BY 1
    START WITH 100
    MAXVALUE 110
    MINVALUE 99
    CYCLE 
    cache 2;
	-- 시퀀스를 넣을 표 만들기
    CREATE TABLE goods(
        goods_no 	number(3),
        goods_name	varchar2(10)
    );
	-- nextval : 시퀀스 늘리기
    INSERT INTO GOODS g 
    VALUES (seq_serial_no.nextval, '제품12');
    SELECT * FROM GOODS g ;
    -- 현재 시퀀스 확인
    SELECT  seq_serial_no.currval FROM dual;
    -- 시퀀스 삭제
    DROP SEQUENCE seq_serial_no;

🖥️ 3. 인덱스 (Index)

3-1. 인덱스(index)란

  • 조회속도를 향상시키기 위한 데이터베이스 검색 기술
  • 색인이라는 뜻으로 해당 테이블의 조회 결과를 빠르게 하기 위해 사용
  • 즉, 인덱스가 필요한 이유는 인덱스를 생성해 줌으로써 조회 속도를 빠르게 할 수 있다.

3-2. 인덱스의 내부구조

  • index를 테이블의 특정 컬럼에 한 개 이상 주게 되면 index table이 따로 만들어지고, 인덱스 컬럼의 로우값과 rowid값이 저장되며 row 값은 정렬된 트리 구조로 저장시켜 두었다가 검색 시 좀 더 빠르게 해당 데이터를 찾는데 도움을 준다.
    (rowid는 테이블을 생성하고 컬럼을 만든 후 데이터를 삽입하면 하나의 row가 생성되며, 이는 절대적인 주소를 가지게 되는데 이를 rowid라 한다)
  • DML 명령을 사용할 때는 원본 table은 물론, index table에도 데이터를 갱신시켜 주어야 하기 때문에 update, insert, delete 명령을 쓸 때 속도가 느려진다.
  • 데이터가 많이 쌓일 것이라고 예상되는 경우 혹은 많이 쌓여 있어 현재 화면에서 조회 속도가 너무 느릴 때 인덱스 생성을 한다.

3-3. 인덱스 생성이 불필요한 경우

  • 데이터가 적은 (수천건 미만) 경우에는 인덱스를 설정하지 않는게 오히려 성능이 좋다.
  • 조회보다 삽입, 수정, 삭제 처리가 많은 테이블

3-4. 인덱스 취약점

  • insert : index table 에도 insert가 된다.
  • delete : index table에서 데이터를 지우지 않고 사용하지 않음으로 표시하게 된다.
  • update : index table에서 delete를 한 후 새로운 데이터를 insert 작업

3-5. 인덱스 생성

  • unique 인덱스 : 인덱스를 사용한 컬럼의 중복값들을 포함하지 않고 사용할 수 있는 장점이 있다.
	create unique index 인덱스명
	on 테이블(컬럼);
  • non-unique 인덱스 : 인덱스를 사용한 컬럼에 중복 데이터값을 가질 수 있다.
	create index 인덱스명
	on 테이블(컬럼);

0개의 댓글

관련 채용 정보