Database/MySQL

[MySQL] 뷰 (View), 인덱스 (Index)

공대생안씨 2024. 7. 28. 21:56

1. 뷰 (View)

  • 실제 데이터를 저장하지는 않고 논리적으로만 데이터가 존재하는 가상의 테이블 (virtual table)
    자주 사용하는 검색 조건식이나 결과를 미리 만들어서 필요할 때 마다 사용!
  • 뷰를 사용한 질의 시에는 DBMS에서 뷰 정의에 따라 질의를 재작성하여 수행함
  • 주로 기반 테이블로부터 정의 / 또 다른 뷰를 기반으로도 정의 가능

📌 뷰의 특징 및 장점

- 생성된 뷰는 또 다른 뷰를 생성하는 기반이 될 수 있음
- 뷰의 정의는 변경 불가! ⇒ 삭제 후 재생성 필요
- 뷰를 통한 데이터 변경에는 제약 존재
    ⇒ 갱신하려면 기반 테이블의 기본키가 포함되어야 함
- 기반 테이블이나 뷰가 삭제되면 이를 기반으로 하는 뷰도 함께 삭제됨

장점
1) 편의성 : 복잡한 질의문 작성이 쉽고 간단함
2) 보안성 : 데이터 보안 유지가 쉬움 (특정 열 숨김, 사용자별로 특정 뷰를 통해서만 데이터 접근)
3) 재사용성 : 반복되는 질의문 작성에 효과적
4) 독립성 : 스키마 변경에도 뷰 질의문 변경 필요 x
    ⇒ 기반 테이블의 구조 변경시, 뷰를 정의하는 질의문만 수정하면 됨!

 

1-1. 뷰 생성

CREATE [OR REPLACE] VIEW 뷰_이름 [열_리스트]
AS SELECT_검색문

-- ex : 물리적 기반 테이블 기반으로 뷰 생성
CREATE VIEW V1_고학년학생 (학생이름, 나이, 성, 학년)
AS SELECT 이름, 나이, 성별, 학년
	 FROM 학생
	 WHERE 학년 >= 3 AND 학년 <= 4;

-- ex : 생성한 뷰를 기반으로 뷰 생성
CREATE VIEW V2_고학년여학생
AS SELECT *
   FROM V1_고학년학생
   WHERE= '여';
  • OR REPLACE : 동일 이름의 뷰가 존재하면 기존 뷰를 무시하고 대체함

 

1-2. 뷰 삭제

DROP VIEW 뷰_이름;
📌 뷰를 삭제하더라도 뷰의 기반 테이블은 삭제되지 않음!

 

2. 인덱스 (Index)

  • 테이블 안의 데이터를 쉽고 빠르게 찾을 수 있도록 하는 DB 객체
  • 인덱스 필요성
    • 쿼리 실행 시 디스크 접근 횟수를 줄여 검색 속도를 높이기 위함!

 

2-1. 인덱스 생성

CREATE [REVERSE] [UNIQUE] INDEX 인덱스_이름 ON 테이블_이름 [ (열이름 [ASC|DESC]) ];

-- ex
CREATE INDEX idx_수강 ON 수강 (학번, 과목번호);
CREATE UNIQUE INDEX ids_과목 ON 과목 (이름 ASC);
✔️ - 테이블에 생성된 인덱스 확인
SHOW INDEX FROM 테이블명;

 

2-2. 인덱스 삭제

DROP INDEX 인덱스_이름 ON 테이블_이름;
ALTER TABLE 테이블명 DROP INDEX 인덱스_이름;

-- ex
DROP INDEX idx_수강 ON 수강;
ALTER TABLE 수강 DROP INDEX idx_수강;