ex) 2-way : 노드 키가 1개임.
ex) 4-way : 노드 키가 3개
- 하드디스크에 상주하는 자료구조 설계 시, 한 노드에 최대한 많은 키를 담아 메모리 접근 횟수를 줄이는 게 좋다.
- M-way 탐색트리
1) 서브 트리를 최대 m개 가짐
2) 한 노드에서 key는 정렬되어 있음
3) 어떤 키 K의 왼쪽 서브 트리의 모든 키는 K보다 작음
4) 어떤 키 K의 오른쪽 서브 트리의 모든 키는 K보다 큼
5) 서브트리도 m-way 트리임
ex) 2-3 tree
1) 빈 레코드에 1 삽입 => 첫번째 레코드가 ID 1을 가지고 삽입 : 키 1을 가진 루트 노드 생성됨(루트이자 리프)
2) 2 삽입 : 2-3 트리이므로 최대 키 2개 가질 수 있음. 1,2 모두 키가 됨.
3) 3 삽입 : 노드의 최대 키 개수 초과로 split 연산 발생
-> 가운데 있는 키를 새로운 노드에 삽입하여 부모 노드로 올림
4) 4 삽입 : 키 3이 있는 노드에 삽입되고 끝남
5) 5 삽입 : 키 3,4 있는 노드로 삽입되며 split 연산 발생됨
6) 6 삽입 : 부모 노드 최대 키 개수 초과로 부모노드 가운데 키를 조부모 노드로 올림. 높이 1개 추가됨
- donate 회전 연산
1) 왼쪽이나 오른쪽 형제 노드에 노드의 최소키 개수를 충족한 후 남는 키가 있는지 질의
ex) 2-3 트리의 노드 당 최소 키 개수 : 1
2) 남는 노드는 빈 노드로 donate 가능 : 부모노드와 값 비교 후 회전 연산
- merge 연산 : 부모에 있는 키 하나가 왼쪽, 오른쪽 자식 노드 가운데로 삽입됨 -> 트리 높이가 줄어듦.
- B+ 트리
- 인덱스 노드
- 레코드 포인터가 없고 대신 다른 인덱스 노드나 데이터 노드에 대한 참조만 있음.
- 인덱스 노드에서는 키 중복 없음. 데이터 노드에서는 키 중복됨.
- 데이터 노드 :
- 각 데이터 노드에는 모두 레코드 포인터 존재
- 모든 키가 다 있음
- 실제 데이터를 가리키고 있음.
- 이중 연결 리스트로 이어져 있음
SELECT * FROM example
WHERE ID = 2
ex) 이름 탐색하는 경우 : 검색 속도 향상을 위해 이름 인덱스를 생성
CREATE INDEX idx_name ON example(name);
SELECT * FROM example WHERE name LIKE '이순신';
- name 이라는 인덱스 생성