땅지원
땅지원's Personal blog
땅지원
전체 방문자
오늘
어제
  • 전체 (353)
    • Frontend (2)
      • React (2)
    • Backend (90)
      • Java (16)
      • Python (19)
      • Spring (23)
      • Database (21)
      • Troubleshooting (8)
    • DevOps (27)
      • ELK (13)
    • CS (40)
    • OS (2)
      • Linux (2)
    • Algorithm (95)
      • concept (18)
      • Algorithm Problem (77)
    • 인공지능 (25)
      • 인공지능 (12)
      • 연구노트 (13)
    • 수업정리 (35)
      • 임베디드 시스템 (10)
      • 데이터통신 (17)
      • Linux (8)
    • 한국정보통신학회 (5)
      • 학술대회 (4)
      • 논문지 (1)
    • 수상기록 (8)
      • 수상기록 (6)
      • 특허 (2)
    • 삼성 청년 SW 아카데미 (6)
    • 42seoul (12)
    • Toy project (3)
    • 땅's 낙서장 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 20.11.6 BB21플러스 온라인 학술대회
  • 20.10.30 한국정보통신학회 온라인 학술대회

인기 글

태그

  • I
  • 이것이 리눅스다 with Rocky Linux9
  • ㅗ
  • E
  • D

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
땅지원

땅지원's Personal blog

Backend/Database

View & Index, 백업과 복원

2022. 9. 14. 10:54

뷰(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
    'Backend/Database' 카테고리의 다른 글
    • SQL - DML(SELECT)
    • SQL - DML(JOIN, SELECT 응용)
    • SQL - DML(INSERT, UPDATE, DELETE)
    • 데이터베이스의 목적
    땅지원
    땅지원
    신입 개발자의 우당탕탕 기술 블로그

    티스토리툴바