1. 물리적 저장 구조
물리적 데이터베이스 (Physical Database)
- 관계형 데이터 모델에서 데이터베이스는 테이블의 집합으로, 테이블은 레코드의 집합으로 정의됨
- 이러한 테이블과 레코드는 결국 디스크와 같은 저장 매체에 저장되며, 저장 매체 관점에서 본 데이터베이스를 물리적 데이터베이스라고 함
물리적 데이터베이스 관점 - 데이터 읽기 과정
- 1. 응용 프로그램에서 데이터를 조회하는 SQL 쿼리가 발생
- 2. DBMS는 운영체제에 데이터의 읽기 연산을 요청
- 3. 운영체제는 파일 시스템에 데이터의 읽기 연산을 요청
- 4. 파일 시스템은 디스크에서 필요한 데이터를 주기억장치로 읽어 들여 DBMS에 전달
물리적 데이터베이스 관점 - 데이터 저장 구조
- 파일: 파일 시스템에서의 기본적인 저장 단위
- 파일은 여러 개의 블록으로 구성됨
- 블록: 주기억장치와의 입출력에 사용되는 고정된 길이의 단위
- 하나의 블록에는 하나 또는 그 이상의 레코드가 저장됨
- 또한, 블록은 디스크의 한 트랙으로부터 읽어올 수 있는 연속적인 데이터 집합으로서 그 크기가 512byte에서 수천byte에 이를 수 있음
2. 인덱스
인덱스 (Index)
- 특정 조건을 만족하는 레코드를 파일로부터 검색하기 위해서는 그 레코드가 파일 내부의 어떤 블록 내부에 위치하는가를 알아야 함
- 이를 알지 못할 경우, 모든 블록을 순차적으로 검색해서 원하는 레코드를 찾아야 함
- DBMS는 이러한 비효율성을 극복하기 위해 특정 조건을 만족하는 레코드의 위치를 빠르게 찾을 수 있는 방법을 제공
- 이와 같이 효율성을 위해 레코드에 대한 물리적 저장 위치를 별도로 기억한 구조를 인덱스라고 함
→ 대표적으로 B+ 트리 인덱스, 해시 인덱스 등이 존재
인덱스의 구조
- 인덱스는 기본적으로 (Key, Value)의 쌍으로 구성되며, 이를 인덱스 엔트리 (Index Entry)라고 부름
- Key: 인덱싱의 대상이 되는 필드의 값
- Value: 실제 레코드의 주소를 가리키는 포인터
인덱스 사용 예시
select count(*)
from student, department
where address='서울' and student.dept_id = department.dept_id;
- 인덱스를 사용하지 않을 경우,
→ (department 테이블의 레코드 수 × student 테이블의 레코드 수) 만큼의 탐색이 필요 - 간단하게 student 테이블의 dept_id에 대한 인덱스를 사용하는 경우,
→ (department 테이블의 레코드 수 + student 테이블에서 조건에 일치하는 레코드 수) 만큼의 탐색이 필요
인덱스는 무조건 좋은가?
- 인덱스가 존재하는 테이블에 데이터를 삽입할 경우, 해당 레코드에 대한 인덱스 엔트리도 추가되어야 함
→ 수정과 삭제 또한 마찬가지 - 추가적인 연산 부담은 성능을 저하시킬 수 있으며, 디스크의 저장 공간에도 부담을 줄 수 있음
- 즉, 테이블의 데이터가 적거나 자주 업데이트되는 경우 인덱스를 사용하지 않는 것이 유리할 수 있음
Reference
https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=104610433