인덱스·뷰·파티션
쉽게 말하면
책 뒤의 찾아보기처럼, 인덱스는 데이터를 빨리 찾게 해 주는 목록이에요. 대신 데이터를 넣고 고칠 때마다 인덱스도 고쳐야 해서 쓰기는 느려져요. 뷰는 SELECT 결과를 표처럼 쓸 수 있게 저장해 둔 가상 테이블이에요. 실제 데이터는 없고 정의만 있어요. 파티션은 큰 표를 기준에 따라 여러 조각으로 나눠 저장하는 거예요.
시험용 정의
인덱스는 키 값과 그 행의 위치를 짝지어 둔 구조로 검색을 빠르게 한다. 대부분 B-트리(균형 트리) 구조이며, 데이터가 물리적으로 인덱스 순서대로 정렬된 클러스터드 인덱스(테이블당 하나)와 그렇지 않은 넌클러스터드 인덱스가 있다. 인덱스가 많으면 조회는 빨라지지만 삽입·삭제·갱신은 느려진다. 뷰는 하나 이상의 기본 테이블에서 유도한 가상 테이블로, 논리적 독립성과 보안(필요한 열만 공개)을 주고 질의를 단순하게 한다. 뷰는 ALTER로 변경할 수 없고, 기본키를 포함하지 않거나 집계·DISTINCT·GROUP BY가 들어간 뷰는 삽입·삭제·갱신에 제약이 있다. 파티션은 큰 테이블을 나눠 저장하는 것으로 범위, 해시, 목록, 조합 분할이 있다. 클러스터는 자주 함께 조회하는 테이블의 데이터를 같은 블록에 저장하는 기법이다.
비유로 이해하기
도서관으로 비유하면 인덱스는 '저자명 찾아보기 카드', 클러스터드 인덱스는 책 자체를 저자명 순서로 꽂아 둔 서가다. 뷰는 '신간 코너' 안내판처럼, 책을 옮기지 않고 보는 방법만 정해 둔 것이다.
자세히
먼저 알아 둘 말
| 말 | 뜻 |
|---|---|
| B-트리 | 모든 리프 노드가 같은 깊이에 있는 균형 다진 트리. 인덱스 구조로 널리 쓰임 |
| 가상 테이블 | 실제 데이터를 저장하지 않고 정의(SELECT)만 저장한 테이블 |
| 기본 테이블 | 실제 데이터를 저장한 테이블. 뷰가 참조하는 원본 |
| 파티셔닝 | 큰 테이블이나 인덱스를 여러 조각으로 나누는 것 |
인덱스
| 항목 | 내용 |
|---|---|
| 만들기·지우기 | CREATE [UNIQUE] INDEX 이름 ON 테이블(열) / DROP INDEX 이름 |
| 클러스터드 | 물리적 저장 순서 = 인덱스 순서. 테이블당 하나. 범위 검색에 유리 |
| 넌클러스터드 | 데이터와 인덱스 순서가 별개. 여러 개 가능 |
| 장점 | 검색·정렬 속도 향상 |
| 단점 | 저장 공간 추가, 삽입·삭제·갱신 때 인덱스도 고쳐야 해 느려짐 |
뷰의 특징
- 기본 테이블에서 유도한 가상 테이블. 저장 공간이 거의 필요 없다
- 논리적 데이터 독립성 제공, 필요한 데이터만 보여 줘 보안에 유리
- 뷰 위에 또 다른 뷰를 만들 수 있다
- ALTER로 변경 불가. DROP 후 다시 CREATE
- 기본 테이블이나 상위 뷰를 지우면 그것으로 만든 뷰도 삭제된다
- 독자적인 인덱스를 가질 수 없다
파티션 종류
| 종류 | 나누는 기준 | 예 |
|---|---|---|
| 범위 분할 | 값의 범위 | 2024년, 2025년 데이터 |
| 해시 분할 | 해시 함수 값 | 고르게 분산할 때 |
| 목록 분할 | 값 목록 | 지역: 서울, 부산 |
| 조합 분할 | 범위 + 해시 등 섞음 | 연도별로 나누고 다시 해시 |
기출에서 더 나온 것
| 말 | 뜻 |
|---|---|
| 병렬 DB 수평 분할 | 라운드 로빈, 범위 분할, 해시 분할 (예측 분할은 없음) |
| DROP VIEW … CASCADE | 뷰를 지우면서 그 뷰를 참조하는 다른 뷰도 함께 지운다. RESTRICT는 참조하는 것이 있으면 지우지 않는다 |
시험에 이렇게 나와요
- 뷰 → 가상 테이블, 물리적으로 저장되지 않음, ALTER로 변경 불가(지우고 다시 만듦), 삽입·갱신·삭제에 제약
- 뷰 위에 뷰를 만들 수 있고, 기반 뷰를 DROP … CASCADE로 지우면 그 위 뷰도 함께 지워진다
- 뷰 장점 → 논리적 독립성·보안·관리 쉬움 (자체 인덱스는 없음)
- 인덱스 → 검색 속도를 높이는 구조, 사용자가 만들고 지울 수 있다 (CREATE INDEX·DROP INDEX)
- 파티션 유형 → 범위·해시·목록·조합 분할 (유닛 분할은 없음)
확인 문제
Q1. 뷰(View)에 대한 설명으로 틀린 것은?
- 가상 테이블이다
- ALTER VIEW로 정의를 바꿀 수 있다
- 보안에 도움이 된다
- 뷰 위에 다른 뷰를 정의할 수 있다
정답 보기
2번 ALTER VIEW로 정의를 바꿀 수 있다
정보처리기사 기준으로 뷰는 ALTER로 정의를 바꿀 수 없어 DROP 후 다시 CREATE한다. 뷰가 정의된 기본 테이블이 삭제되면 뷰도 자동 삭제된다.
Q2. 인덱스에 대한 설명으로 틀린 것은?
- 추가 저장 공간이 필요하다
- 검색 속도를 높인다
- 데이터 삽입·삭제가 많으면 성능이 좋아진다
- 대부분 B-트리 구조를 쓴다
정답 보기
3번 데이터 삽입·삭제가 많으면 성능이 좋아진다
삽입·삭제 때 인덱스도 고쳐야 해 오히려 느려질 수 있다.
Q3. 뷰를 정의한 기본 테이블을 삭제하면?
- 뷰는 그대로 남는다
- 오류가 나서 삭제되지 않는다
- 뷰도 자동으로 삭제된다
- 뷰가 기본 테이블로 바뀐다
정답 보기
3번 뷰도 자동으로 삭제된다
뷰도 자동으로 삭제된다. 뷰는 기본 테이블을 바탕으로 만든 가상 테이블이라 기본 테이블이 없으면 존재할 수 없다.
Q4. 데이터를 지역(서울, 부산, 대구)처럼 정해진 값 목록으로 나누는 파티션은?
- 범위 분할
- 조합 분할
- 해시 분할
- 목록 분할
정답 보기
4번 목록 분할
목록(List) 분할이다. 정해진 값 목록으로 나눈다. 범위 분할은 날짜·숫자 범위로, 해시 분할은 해시 함수 결과로 나눈다.
Q5. 뷰(View)에 대한 설명으로 옳은 것은?
- 뷰마다 자체 인덱스를 갖는다
- 데이터를 물리적으로 따로 저장한다
- 뷰 위에 다른 뷰를 만들 수 있다
- ALTER VIEW로 정의를 바꾼다
정답 보기
3번 뷰 위에 다른 뷰를 만들 수 있다
뷰는 가상 테이블이라 저장 공간·인덱스가 없고, 바꾸려면 지우고 다시 만든다.
Q6. 기반 뷰를 지우면서 그 뷰를 참조하는 다른 뷰까지 함께 지우는 옵션은?
- CASCADE
- NO ACTION
- RESTRICT
- SET NULL
정답 보기
1번 CASCADE
RESTRICT는 참조하는 것이 있으면 지우지 않는다.
헷갈리기 쉬운 O·X
클러스터드 인덱스는 테이블 하나에 여러 개 만들 수 있다.
정답 보기
X 물리 순서는 하나뿐이라 하나만 가능.
뷰는 필요한 열만 보여 주어 보안에 도움이 된다.
정답 보기
O
뷰는 독자적인 인덱스를 가질 수 있다.
정답 보기
X 정보처리기사 기준으로 뷰는 독자적인 인덱스를 가질 수 없다.