뷰
뷰의 특징
뷰의 종류
종류 | 설명 | 비고 |
---|---|---|
심플 뷰 | 하나의 테이블에서 데이터 생성 | CREATE VIEW 명령어로 생성 |
컴플렉스 뷰 | 여러 개의 테이블을 조인하여 데이터 생성 | CREATE VIEW 명령어로 생성 |
인라인 뷰 | SELECT 문의 FROM 절에 기술한 SELECT 문 | 1회용 뷰로 권한을 제어할 수 없음 |
employees 테이블과 emp_details_view 뷰를 조인하여 employee_id가 100인 직원의 employee_id, hire_date, department_name, job_title을 출력하기
SELECT A.employee_id, A.hire_date, B.department_name, B.job_title
FROM employees A, emp_details_view B
WHERE A.employee_id = B.employee_id AND A.employee_id = 100;
department_name과 job_title을 출력하려면 departments 테이블과 jobs 테이블을 조인해야 해서 복잡하지만 이미 emp_details_view 뷰가 해당 정보를 가지고 있으므로 간단하게 emp_details_view 뷰만 조인하여 원하는 결과를 출력할 수 있음
옵티마이저
옵티마이저 방식의 종류
구분 | PBO | CBO |
---|---|---|
개념 | 사전에 정의된 규칙 기반 계획 | 최소 비용 계산, 실행 계획 수립 |
기준 | 실행 우선순위 | 액세스 비용 |
성능 | 사용자의 SQL 작성 숙련도 | 옵티마이저 예측 성능 |
특징 | 실행 계획의 예측이 용이함 | 저장된 통계 정보의 활용 |
고려 사항 | 저효율, 사용자의 규칙 이해도 | 예측 복잡, 비용 산출 공식 정확성 |
인덱스
인덱스의 특징
employees 테이블에서 employee_id가 100인 직원을 찾는 원리
사용자는 employee_id가 100인 직원의 정보 조회를 오라클 데이터 베이스 시스템에 요청
오라클 데이터 베이스 시스템은 사용자에게 SELECT 문의 질의를 받으면 데이터베이스 메모리 안의 버퍼 캐시를 살펴봄
버퍼 캐시는 자주 사용되는 테이블의 데이터 정보가 저장되어 있는 일종의 ‘가속 장치’이므로 검색 데이터가 버퍼 캐시 안에 있다면 데이터는 빠르게 조회되어 출력됨
버퍼 캐시에 조회하는 데이터가 없다면 데이터베이스 시스템은 디스크에 저장되어 있는 데이터를 찾아냄
해당 데이터를 버퍼 캐시로 복사함
결과값을 사용자에게 반환함
⇒ 즉, 모든 데이터를 버퍼 캐시에 저장하면 좋겠지만 관리 효율성과 자원 비용 때문에 불가함
결국 대부분의 데이터가 있는 디스크에서 데이터를 검색해야 하는데 데이터 양이 많아질수록 시간이 매우 오래 걸림
하지만 색인을 사용하면 데이터가 어디에 존재하는지 알려줄 수 있으므로 훨씬 효과적임
이렇게 데이터가 존재하는 색인 값만 별도로 만들어서 관리하는 기법이 인덱스
인덱스는 데이터의 검색 속도를 개선하기 위해 테이블의 행을 효율적으로 식별 가능하도록 함
로우 아이디
인덱스의 종류
데이터의 종류가 많고 동일한 데이터가 적은 경우에 주로 사용
루프 블록부터 리프 블록까지 사용자가 원하는 값을 스무고개하듯이 순차적으로 찾아가는 구조
(트리 기반 인덱스라고도 부름)
종류 | 설명 | 사용 예 |
---|---|---|
unique index | 중복 데이터가 없는 경우에 사용 | 기본 키, 유일 키 데이터 |
non-unique index | 중복 데이터가 있는 경우에 빠른 검색 결과를 보장 | 인덱스가 필요한 일반적인 데이터 |
descending index | 내림차순 데이터 값으로 인덱스를 생성 | 매출, 최근 일자 등 |
composite index | 여러 열을 합쳐서 하나의 인덱스를 생성 | 여러 조건이 필요한 경우 |
(예) 고객 번호 and 성별 |