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_수강;
'Database > MySQL' 카테고리의 다른 글
[MySQL] 기본 SQL 정리 (2) (DML, 집계 함수) (0) | 2024.07.28 |
---|---|
[MySQL] 기본 SQL 정리 (1) (DDL, DCL) (0) | 2024.07.28 |
[MySQL] ERROR 1819 (HY000): Your password does not satisfy the current policy requirements 에러 해결 (0) | 2023.12.12 |
[MySQL] MySQL 완전 삭제 후 재설치 (Mac OS) (0) | 2023.12.12 |