뷰(View) : 하나 이상의 테이블을 합하여 만든 가상의 테이블
읽기 전용이 기본, 일부 경우 업데이트 가능
CREATE VIEW 뷰이름 ( ... ) AS
SELECT ...
장점
인라인 뷰 vs 뷰
| 구분 | 일반 뷰 (View) | 인라인 뷰 (Inline View) |
|---|---|---|
| 저장여부 | DB 객체로 저장됨 (영구적) | SQL 문 실행 시에만 생성됨 (일회용) |
| 재사용성 | 다른 쿼리에서도 이름으로 재사용 가능 | 해당 쿼리 내에서만 사용 가능 |
| 생성권한 | CREATE VIEW 권한이 필요함 | 별도 권한 없이 SELECT 권한만 있으면 가능 |
CREATE VIEW 뷰이름 AS
SELECT ...
FROM ...
WHERE ...
장점
특징
예)
Q. 주소에 '대한민국'을 포함하는 고객들로 구성된 뷰를 만들고 조회하시오. 뷰의 이름은 vw_Customer로 설정하시오.

뷰 수정
CREATE OR REPLACE VIEW 뷰이름 AS
SELECT ...
뷰 삭제
DROP VIEW 뷰이름;
예)
Q. vw_Customer 뷰를 영국을 주소로 가진 고객으로 변경하시오. phone 속성은 필요 없으므로 포함하지 마시오

일반적으로 뷰는 읽기 전용!!
뷰의 활용 : INSERT, UPDATE, DELETE 문
뷰에 대한 삽입, 수정, 삭제 연산이 제한적으로 수행됨
주의 ) 실제로 기본 테이블에 수행되므로 결과적으로는 기본 테이블이 변경됨, 변경 불가능한 뷰도 존재
변경 불가능한 뷰
NOT NULL로 지정된 속성이 포함되어 있지 않은 뷰DISTINCT 또는 GROUP BY 이 포함된 뷰Q. 마당서점 데이터베이스를 이용하여 다음에 해당하는 뷰를 작성하시오
(1) 판매가격이 20,000원 이상인 도서의 도서번호, 도서이름, 고객이름, 출판사, 판매가격을 보여주는 highorders 뷰를 생성하시오

(2) 생성한 뷰를 이용하여 판매된 도서의 이름과 고객의 이름을 출력하는 SQL문을 작성하시오

(3) highorders 뷰를 변경하고자 한다. 판매가격 속성을 삭제하는 명령을 수행하시오. 삭제 후 (2)번 SQL문을 다시 수행하시오


엑세스 시간
디스크의 입출력 시간
엑세스 시간 계산 = 탐색시간 + 회전 지연시간 + 데이터 전송시간
탐색시간 : 엑세스 헤드를 트랙에 이동시키는 시간
회전 지연시간 : 섹터가 엑세스 헤드에 접근하는 시간
데이터 전송시간 : 데이터를 주기억장치로 읽어오는 시간
DBMS가 하드 디스크에 데이터를 저장하고 읽어올 때, 속도 문제 발생
컴퓨터 시스템 내의 연산 속도는 빠르지만, 디스크의 엑세스 속도는 상대적으로 느림
DBMS
SHOW VARIABLES LIKE 'datadir';로 확인 가능인덱스 : 데이터를 쉽고 빠르게 찾을 수 있도록 만든 데이터 구조

B-tree에서의 검색 : 루트에서 시작해 키를 비교하며 내려감
루트노드에서 값 비교 -> 내부노드에서 해당 노드 찾기 -> ... -> 리프노드에 도달
트리 구조 이용하기 때문에 한번 검색할 때마다 검색 대상이 1/n으로 줄어들어 접근 시간이 적게 걸림
DBMS 인덱스에서 가장 많이 쓰이는 구조
내부노드 -> 키 저장 / 리프노드 -> 실제 데이터 저장
모든 리프노드가 연결 리스트로 이어져 있음 -> 연속된 데이터를 빠르게 조회 가능
특정 키 검색은 B-tree와 동일, O(log n)
두 가지 데이터 모두 빠른 검색을 필요로 하는 경우 유리
클러스터 인덱스로 저장된 데이터의 순서를 가능한 유지하면서
(클러스터 인덱스의 장점)
동시에 데이터 삽입, 삭제에 대한 인덱스 관리 비용을 줄일 수 있음
(보조 인덱스의 장점)
CREATE INDEX 인덱스이름 ON 테이블이름;
인덱스를 생성하기 전 고려사항
생성된 인덱스는 SHOW INDEX 명령어로 확인 가능
+) SQL문 앞에 EXPLAIN 키워드 붙이면 실행 계획 표시됨
-> id(실행순서) / select_type / table / type(조인방식) / possible_keys / key / rows / extra
B-tree 인덱스는 데이터 수정, 삭제, 삽입이 잦으면 노드 갱신이 주기적으로 일어남
-> 단편화 현상 발생
=> ANALYZE 문법 통해 인덱스 다시 생성