본문 바로가기
정보처리기사

인덱스(Index)와 뷰(View)

by 두두리안 2022. 7. 4.
728x90

목차

1.인덱스(Index)의 개념
2.인덱스 설계
3.인덱스 구현
4.뷰(View)

1.인덱스(Index)

1-1. 인덱스 개념

* 인덱스는 테이블 조회 속도를 높이기 위해 일부 컬럼의 데이터만을 빠르게 검색할수 있도록 구성된 자료구조
* 테이블 내의 1개의 컬럼을 이용하여 별도의 인덱스 테이블을 생성하고 데이터에 접근하기 좋은형태로 순서변경
* 인덱스 테이블 안에는 순서가 변경된 데이터와 함께 해당 데이터의 원본순서를 저장하고 있는 컬럼도 저장
* 특정 컬럼을 기본키로 지정하는 경우를 제외하면, 인덱스는 자동으로 생성되지 않는다

2.인덱스 설계

2-1. 인덱스 설계 과정

1. 접근경로수집
    * 반복 수행되는 접근 경로: 조인의 기준이 되는 컬럼을 후보로 선택하는 가장 일반적인 경우
    * 분포도가 양호한 컬럼: 주문번호나 주민등록번호와 같은 중복이 없어 충분한 수행속도를 보장받는 경우
    * 조회 조건에 사용되는 컬럼: 명칭이나 날짜와 같은 조회조건으로 많이 이용되는 경우
    * 자주 결합되어 사용되는 컬럼
    * 데이터 정렬순서와 그룹핑 컬럼
    * 일련번호를 부여한 컬럼: 마지막 일련번호를 찾는 경우가 빈번한 경우
    * 통계자료 추출 조건: 다양한 추출조건을 사전에 확보해야 하는 경우
    * 조회조건이나 조인조건 연산자: 비교 연산자를 병행조사하여 인덱스 결합순서를 결정해야하는 경우
2. 분포도 조사를 통한 후보컬럼 선정
    * 테이블의 크기가 작은 경우엔 인덱스를 생성하지 않는다
    * 단순 보관용이나 전체 조회용 테이블은 인덱스를 생성하지 않는다
    * 다른 테이블과 순차적 조인이 발생되는 경우에 인덱스를 설정한다
    * 가능한 수정이 빈번하지 않은 컬럼을 인덱스로 설정
3. 접근 경로 결정
    * 인덱스 후보 목록을 이용하여 접근 유형에 따라 어떤 인덱스 후보를 사용할것인가를 결정
    * 만약 누락된 접근경로가 있다면 분포도 조사를 실시하고 인덱스 후보목록에 추가작업을 반복
4. 컬럼 조합 및 순서 결정
    * 단일 컬럼의 분포도가 양호하면 단일 컬럼 인덱스로 확정
    * 하나 이상의 컬럼이 결합된 결합 인덱스가 필요한 경우에는 추가 고려하여 인덱스 컬럼 순서를 결정
5. 적용시험
    * 설계된 인덱스를 적용하고 접근 경로별로 인덱스가 사용되는지 시험해야 한다

2-2. 결합 인덱스의 선두 컬럼 결정

1. 항상 사용되는 컬럼: 선행되는 컬럼은 반드시 값이 존재
2. 등호 조건으로 사용되는 컬럼: 범위연산보다 등호연산을 사용하는 컬럼을 선두에 배치하는것이 좋다
3. 분포도가 좋은 컬럼: 값의 중복이 적은 컬럼을 선두로 사용하는것이 좋다
4. 정렬과 그룹: 정렬이나 그룹이 되는 컬럼을 우선순위로 사용하는것이 좋다

2-3. 인덱스 설계시 고려사항

* 새로 추가되는 인덱스가 기존 접근 경로에 영향을 미칠수 있음에 유의
* 너무 많거나 넓은 범위의 인덱스는 추가적인 저장 공간과 오버헤드를 발생
* 인덱스와 테이블 데이터의 저장공간은 적절히 분리

3.인덱스 구현

3-1. 인덱스 생성

* UNIQUE: 중복값을 허용하지 않는 인덱스를 생성
* CREATE [UNIQUE] INDEX 인덱스명 ON 테이블명(필드)

3-2. 인덱스 삭제

* ALTER TABLE 테이블명 DROP INDEX 인덱스명

3-3. 인덱스 변경

* ALTER [UNIQUE] INDEX 인덱스명 ON 테이블명(필드)

3-4. 인덱스 조회

* SHOW INDEX FROM 테이블명

4.뷰(View)

4-1. 뷰의 개념

* 하나 이상의 테이블로부터 유도되어 정의되는 논리적인 가상 테이블
* 가상 테이블의 데이터는 물리적으로 존재하지 않으며 뷰의 정보는 시스템 카탈로그에 저장
* 외부 프로그램이나 사용자가 접근하는데 필요한 외부 스키마를 구성할때 쓰인다
* 같은 데이터를 각각의 다른 방법으로 사용자에게 제공
* 뷰를 통한 또 다른 뷰를 정의할수 있으며, 종속된 테이블이 제거되면 함께 제거

4-2. 뷰의 장단점

1. 뷰의 장점
    * 논리적 데이터 독립성: 테이블의 구조의 변경에 따른 뷰에 영향 최소화
    * 사용자 데이터 관리 용이: 여러 테이블에 존재하는 데이터에 대해 단순화된 질의어 사용가능
    * 데이터 보안 용이: 해당 테이블의 일부 정보만을 볼수 있도록 접근 허용
2. 뷰의 단점
    * 물리적으로 저장되어 있지 않기 때문에 자체 인덱스 사용이 불가능
    * 뷰를 변경하려면 삭제한 뒤 다시 생성
    * 뷰의 내용에 대한 삽입, 삭제, 변경에 제약이 따른다

4-3. 뷰의 설계시 고려사항

* 뷰는 결국 원본테이블에 접근하는것으로, 사용형태에 따라 처리속도에 영향을 줄수 있다
* 가능한 최적의 접근경로를 사용하는 조건을 지정할수 있도록 한다

4-4. 뷰의 구현

1. 뷰 생성
    * CREATE VIEW <뷰이름>(<필드목록>) AS SELECT ..
    * EPLACE: 뷰가 이미 존재하는 경우 재생성
    * FORCE: 원본 테이블의 존재여부에 관계없이 뷰 생성
    * NOFORCE: 기본 테이블이 존재할때만 뷰 생성
    * WITH CHECK OPTION: 서브쿼리 내의 조건을 만족하는 튜플만을 변경
    * WITH READ ONLY: DML 작업 불가능
2. 뷰 삭제
    * DROP VIEW <뷰이름>
3. 뷰 조회
    * SELECT * FROM <뷰이름>

참고자료 : 이기적 환상콤비 정보처리기사

728x90

'정보처리기사' 카테고리의 다른 글

분산 데이터베이스 설계  (0) 2022.07.05
병행제어(Concurrency Control)와 로킹(Locking)  (0) 2022.07.05
정규화  (0) 2022.07.04
데이터제어어(DCL)  (0) 2022.07.03
데이터조작어(DML)  (0) 2022.07.03