본 내용은 유튜버 쉬운코드의 강의 "데이터베이스"를 참고하여 작성하였습니다.
BST 복습
이진 탐색 트리(Binary Search Tree) : 모든 노드의 왼쪽 서브 트리는 해당 노드의 값보다 작은 값들만 가지고 모든 노드의 오른쪽 서브 트리는 해당 노드의 값보다 큰 값들만 가짐.
- 자녀 노드는 최대 두 개까지
- 자녀노드를 세 개 가지게 만들려면? -> 기준점이 되는 값이 2개(k1, k2)가 필요함.
B tree
- 자녀 노드의 최대 개수를 늘리기 위해 부모 노드에 key를 하나 이상 저장
- 부모 노드의 key들을 오름차순으로 정렬
- 정렬된 순서에 따라 자녀 노드들의 key 값의 범위가 결정됨.
- 위의 방식을 사용하게 되면 자녀 노드의 최대 개수를 입맛에 맞게 결정해서 쓸 수 있다.
- B tree는 BST를 일반화한 tree
- 최대 몇 개의 자녀 노드를 가질 것인지가 B tree를 사용할 때 중요한 파라미터
B tree 주요 파라미터
- M : 각 노드의 최대 자녀 노드 수
- M차 B tree : 최대 M개의 자녀를 가질 수 있는 B tree
- M-1 : 각 노드의 최대 key 수
- 올림(M/2) : 각 노드의 최소 자녀 노드 수 (root node, leaf node 제외)
- 올림(M/2)-1 : 각 노드의 최소 key 수 (root node 제외)
- 1번이 정해지면 2~4번은 자동으로 결정됨.
- 어떤 파라미터를 기준 파라미터로 잡을지는 다를 수 있음.
B tree 노드의 key 수와 자녀 수의 관계
- internal 노드의 key 수가 x개라면 자녀 노드의 수는 언제나 x+1개다.
-> 노드가 최소 하나의 key는 가지기 때문에 몇 차 B tree인지와 상관없이 internal 노드는 최소 두 개의 자녀는 가진다.
-> M이 정해지면 root 노드를 제외하고 internal 노드는 최소 올림(M/2)개의 자녀 노드를 가질 수 있게 된다.
B tree 데이터 삽입
- 추가는 항상 leaf 노드에 한다.
- 노드가 넘치면 가운데(median) key를 기준으로 좌우 key들은 분할하고 가운데 key는 승진한다.
3차 B tree의 데이터 삽입 예제
1 추가 15 추가 2 추가 트리 분리 |
![]() ![]() |
8 추가 10 추가 트리 분리 트리 분리 |
![]() |
5 추가 30 추가 트리 분리 |
![]() ![]() |
50 추가 70 추가 트리 분리 |
![]() |
90 추가 20 추가 트리 분리 트리 분리 |
![]() ![]() |
60 추가 40 추가 트리 분리 트리 분리 |
![]() ![]() |
7 추가 9 추가 트리 분리 |
![]() |
트리 분리(최종) | ![]() |
- 추가할 때 오름차순으로 정렬
- 모든 leaf 노드들은 같은 레벨에 있다.
-> balanced tree
-> 검색 avg/worst case : O(log N)
50 추가 70 추가 트리 분리 |
![]() |
60 추가 40 추가 트리 분리 트리 분리 |
![]() ![]() |
트리 분리(최종) | ![]() |
'데이터베이스(쉬운코드)' 카테고리의 다른 글
28. B tree 3부 : DB 인덱스로 쓰는 이유 (0) | 2025.02.10 |
---|---|
27. B tree 2부 : 데이터 삭제 (1) | 2025.02.08 |
25. DB 인덱스 (1) | 2025.01.30 |
23~24. DB 정규화 : 개념, INF~BCNF, 역정규화 (0) | 2025.01.29 |
22. DB 정규화의 근본 Functional dependency (0) | 2025.01.29 |