* 물리적 데이터 베이스 : 저장매체의 관점에서 살펴본 데이터베이스의 형태
* char 사용한 레코드
장점: 레코드 불러올 때 편함 , 단점: 길이가 김
* varchar 사용한 레코드
장점: 효율적 , 단점: 레코드 경계를 모름 -> 해결책: 맨 뒤에 인덱스를 둠
+ 클러스터링 : 자주 검색되는 필드를 기준으로 관련 레코드들을 같은 블록에 저장
* 인덱스
: 레코드의 위치를 빨리 찾을 수 있는 방법 (인덱스가 없다면 무조건 순차검색 해야함)
검색 속도를 높이기 위해서 레코드에 대한 물리적 저장 위치를 별도로 기록한 구조
레코드 검색의 기준이 되는 필드 : 기본키, 보통의 DBMS에서는 기본키에 대한 인덱스 자동 생성
레코드의 삽입, 수정, 삭제에 따라 관련 인덱스 구조가 변경되어야 함 -> 속도 저하 문제
인덱스 엔트리 : (검색키, 주소)
* B+트리 인덱스 (차수 : 한 노드에서 하위자식노드를 가리키는 주소의 개수)
: 단말노드에 실제 레코드 주소 저장 (* 단말노드 : 자료 구조 트리에 존재하는 모든 노드 가운데, 자식을 가지지 않는 노드)
루트에서 단말노드까지의 모든 경로의 길이는 같다
루트노드는 최소 2개, 최대 n개의 자식노드 가진 단말노드는 (n-1)/2 ~ (n-1) 개의 검색키 값 가짐
루트노드와 단말노드 제외한 중간 노드들은 n/2 ~ n개의 자식 노드를 가짐
* 복합 인덱스
: 두개 이상의 필드에 대해 하나의 인덱스 생성
하나의 인덱스로 레코드를 찾을 수 있음
* 해시 인덱스 (해시 함수 기반)
(해시함수 : 주어진 키 값으로부터 레코드가 저장되어 있는 주소를 산출해내는 수식)
버켓 n개면 해시함수 결과도 n개가 나와야 함
인덱스엔트리가 각 버켓에 골고루 들어가야 함
버켓의 사이즈는 고정적이라 만약 오버플로우면 새로운 버켓 생성하여 기존 버켓과 연결
- 해시인덱스 : 같은지를 비교하는 검색에 유리
- b+ 트리 : 범위 검색에 유리
* 인덱스의 분류
1) 대응 밀집도: 희소 인덱스와 밀집 인덱스
희소 인덱스 : 일부 레코드에 대해서만 주소 o (키 값에 대한 조건 있어야 함)
밀집 인덱스 : 모든 레코드에 대해서 주소 o, sorting필요 x
2) 클러스터링 유무: 클러스터 인덱스와 비클러스터 인덱스
* 클러스터 (1차) 인덱스 : 동일순서, 특정 필드(검색 제일 많이 되는 필드, 보통은 pk) 에 대해 sorting된 결과, 유사값 몰려있음 , 하나의 테이블에 하나만 만들 수 있음
* 비클러스터 (2차) 인덱스 : 키의 순서 상관없이 랜덤
오라클에서의 인덱스 설정
create <인덱스이름> on <테이블이름><필드리스트>
create unique <인덱스이름> on <테이블이름><필드리스트> // 후보키에 대해서만 (동일한 값 존재하면 에러)
drop index <인덱스이름>
* 인덱스를 설정해야 할 경우
1. 레코드 수가 많을 때
2. where절, 조인에 자주 참여하는 필드 :키, 외래키, null이 많은 필드
* 인덱스 설정하지 않는 필드
1. 레코드 수 적을 때
2. 삽입, 삭제, 수정 잦을 때
3. where절에서사용 거의 안되는 필드
4. 테이블내에서 구별되는 값의 개수가 적은 필드
'개인공부 > db' 카테고리의 다른 글
추가개념 (0) | 2023.07.20 |
---|---|
9장 (트랜잭션) (0) | 2023.07.20 |
7장 (함수적 종속과 정규화) (0) | 2023.07.20 |
6장 (데이터베이스 설계) (0) | 2023.07.20 |
5장 (무결성과 보안) (0) | 2023.07.20 |