주제
- b-Tree 롼?
목자
내용
🏗️ Build Up
한 노드를 기점으로 왼쪽에는 그보다 작은 값들이, 오른쪽에는 그보다 큰 값들이 배치되어 있는 자료구조이다.
- 사전 조건
노드의 값은 중복될 수 없다.
- 특징
- 탐색시간이 평균적으로 log(n)으로 빠르다라는 특징을 갖지만, 한쪽으로 치우쳐져 있는 경우라면 n의 시간 복잡도를 갖는 단점이 있다. (
편향트리 1,2,3,4,5,6 일떄, 6,5,4,3,2,1 인 경우
)
💨What
B-Tree란?
인덱스를 이루고 있는 자료구조의 일종이다.
Mysql의 DB Engine인 InnoDB는 B+Tree로 이루어져 있다.
Binary Search Tree와 유사 구조를 가지지만 훨씬 더 좋다.
- 특히나, BinarySearch 보다 탐색시간이 빠르다는 장점을 가지고 있다.
최악의 경우를 포함해 Log(n)이라는 시간복잡도
를 갖는다.
특징
균형 트리

- 노드에 키와 데이터를 가지고 있다.
- 단점
- 균형을 이루는 데에는 추가적인 비용이 필요하다 ( 삽입, 수정, 삭제의 반복을 통해 균형을 맞추기 위한 행위가 필요하기 때문)
❓Why [왜 B-Tree는 빠른가?]
og(n)이라는 시간복잡도를 가지는 특징 중 하나가 balanced 한 특징이 있기 때문이다.
데이터 양에 비례한 포포몬쓰

✅ Diff B+Tree
ㅤ | B-Tree | B+Tree |
노드 저장 데이터 | 키값과 포인터를 포함해 저장 | 키값만 저장함 |
리프노드 연결리스트 | x | o |
- B+Tree는 B-Tree와는 다르게 노드에 키값만 저장하고 있는다는 특징이 있다. 그럼으로써 리프노드에는 서로다른 데이터 끼리 연결리스트로 연결되어 있다.
- 장점
- 데이터의 저장 공간을 더 사용할 수 있다.
- 같은 페이지 메모리에서 더 많은 노드들을 수용할 수 있게되는 것이다.
- 그러므로 tree의 depth 또한 줄어지게 되는 장점이 있다.
- 리프노드의 연결리스트로 이루어져 있어 범위 탐색이 매우 용이하다.
- 왜냐하면 기존의 B-Tree는 루트노드를 기점으로 지속적으로 탐색을 해야 하기 때문이다.
- B+Tree는 해당 시작 지점으로 부터 끝 지점까지 탐색으로 해당 범위를 전부 탐색하기 때문에 이점에서는 B+Tree가 더 빠르다.
- 삭제 작업이 B-Tree에 비해 쉬운 장점이 있다.
- 네부 노드에서 값을 제거할 필요가 없기 때문이다.
- B+Tree에는 동일한 값이 반복된다. B-Tree에서는 각 값이 고유하하다
- 단점
- 오히려 루트에 가까운 대상을 찾을 떄 B-Tree보다 탐색이 느리다.
- 왜냐하면 B+Tree는 링크드 리스트로 연결된 단말노드의 깊이까지 무조건적으로 탐색하기 때문이다.
📌 REFER
- 한국
- 외국