뷰(View)
가상 테이블
조인을 써서 여러 테이블의 값들을 한번에 정의&이용하고 싶을 때 테이블을 선언하는거보다
뷰를 써서 원하는 정보를 얻을 수 있다.
- With Read Only
=> 내용 수정을 불가능하게 만드는 옵션이다.
- With Check Option
=> 조건 컬럼값을 변경 못하게 하는 옵션
View Hierachy : 2단계 뷰 생성
고객 -> 우수회원 -> 단골회원
CREATE or REPLACE VIEW 우수회원 AS
SELECT * from 고객 WHERE 등급 IN ('gold', 'vip')
WITH CHECK OPTION;
CREATE or REPLACE VIEW 단골회원(ID, 이름, 나이, 등급) AS
SELECT 고객아이디, 고객이름, 나이, 등급 from 우수회원
WHERE 적립금 > 4000;
중간의 우수회원 뷰를 삭제하면 하위뷰인 단골회원은 이용x
하지만 뷰의 정의는 남아있다.
마찬가지로 기본 테이블을 삭제하면 모든 하위 뷰 이용x
하지만 뷰의 정의는 남아있다.
create view v_employee
as
select e.employee_id as 사원번호, e.first_name as 사원명, d.department_name as 부서명
from employees e, departments d
where e.department_id = d.department_id;
select *
from v_employee;
뷰 실체화(Materialization)
실제화된 뷰 : 실제 데이터를 가지는 뷰(결과를 미리 뷰에 저장), copy 본 이라고 얘기한다.
==> 왜쓰는건가? 속도를 위해서(색인의 역할)
master table이 Drop되어도 별도로 데이터 조회 가능하다 => 복사를 했기 때문에
ex) 50만개의 데이터가 들어있는 테이블을 조인 검색을 해본다치면 매번 select할 때 마다 큰 연산시간을 필요로 한다.
하지만 CREATE MATERIALIZED VIEW ___________ 실체화 된 뷰를 생성하고 select를 하면 처음만 오래걸리고
나중엔 빠르게 검색을 할 수 있다.
<형식>
CREATE MATERIALIZED VIEW 뷰이름
[ BUILD { IMMEDIATE | DEFERRED }
REFRESH { FORCE | FASH | COMPLETE | NEVER }
on { DEMAND | ON COMMIT }
ENABLE QUERY REWRITE
]
AS SELECT FROM WHERE문
> Build
IMMEDIATE : 즉시 실체화
DEFERRED : 나중에 실체화 할껀가, DBMS_MView.Refresh( ) 로 실체화
> Refresh(새로고침)
on demand : 수동으로 refresh 함
on commit : 원본테이블에 commit이 발생하면 실행
update : 업데이트가 되면 실행
Query Rewrite란?
SQL문장을 수행하였더라도 미리 정의된 MView가 존재한다면, MView를 조회하도록 Query가 다시 쓰여짐
색인(Index)
목적 : 검색 속도 향상
데이터의 변경 작업이 많을 경우 색인 관리에 추가 비용이 들기 때문에 유의해야함.
- 자주 검색하는 열에 대해 색인 생성해야함
- 중복도가 높은 열은 색인 효과가 별로 없음 ==> 기본키가 중복이 아예 없기 때문에 색인으로 적절
- 조인으로 사용되는 열은 색인 효과가 좋음
- 인덱스의 사용 여부를 사용자가 명시적으로 지정하지 않아도 된다.
기본키, Unique 속성에는 자동으로 색인이 생성됨
==> 오라클 Noraml Index : B(Balanced)-Tree(인덱스 알고리즘)
==> 기본적인 색인 구조가 B-Tree임, 단일 검색은 효과적. 범위 검색에는 비효율적
색인 삭제
DROP INDEX idx_Emp_Salary;
색인을 삭제하더라도 질의문과 질의 결과는 동일
SELECT * FROM Employees WHERE salary = 10000; -- 사용된 색인 없음
자동 생성된 색인은 삭제할 수 없음
DROP INDEX EMP_EMP_ID_PK; -- 굳이 삭제하고자 한다면 PK 제약조건을 제거해야 함
오라클 백업 및 복원
EXP(백업) / IMP(복원)
명령창 프롬프트에서 실행
- 전체 DB 백업/복원
EXP userid=system/1@xe file='oradb.dmp' full=y
IMP userid=system/1@xe file='oradb.dmp' full=y
- 사용자 단위 DB 백업/복원
EXP userid=hmart/1234@xe file='hmart.dmp'
IMP userid=hmart/1234@xe file='hmart.dmp'
- 테이블 단위 백업/복원
EXP userid=hmart/1234@xe file='hmart고객.dmp' tables=고객
IMP userid=hmart/1234@xe file='hmart고객.dmp' tables=고객
'Backend > Database' 카테고리의 다른 글
SQL - DML(SELECT) (0) | 2022.09.08 |
---|---|
SQL - DML(JOIN, SELECT 응용) (0) | 2022.04.19 |
SQL - DML(INSERT, UPDATE, DELETE) (0) | 2022.04.19 |
데이터베이스의 목적 (0) | 2022.04.15 |
데이터베이스에 대해 (0) | 2022.04.15 |