Written by
nodejs-style
on
on
인덱스 - B-Tree, B+Tree
인덱스 - B-Tree, B+Tree
B-Tree
B-Tree는 인덱스를 이루고 있는 자료구조의 일종이다. 트리 구조이지만 이진트리와는 달리 다분기 트리이다. 분기 개수가 두 개 정도가 아닌 수십~수백 개에 걸치는 경우도 있다. 분기 개수를 많이 하는 이유는 계층의 단수를 늘려 액세스 횟수를 적게 하기 위함이다.
이진트리 O(log2N), 다분기 트리 O(logmN)
가장 상단 노드를 루트노드, 중간 노드를 브랜치 노드, 가장 아래 노드를 리프 노드라고 한다.
B-Tree는 항상 정렬되어 있으며, 루트 노드에서 리프 노드로 까지 가는 거리가 일정한 균형 트리이다. 그렇기 때문에 성능이 안정화되어있다.
B+Tree
B+Tree는 B-Tree의 확장개념이다. B-Tree의 경우 브랜치 노드, 리프 노드에서 값을 관리하지만, B+Tree는 리프 노드에서만 값을 관리하고 리프 노드끼리 LinkedList로 연결되어 있다. 그렇기 때문에 어떠한 값을 검색하더라도 리프 노드까지 가지 못하면 값을 찾을 수 없다는 단점이 있다. 하지만 리프 노드를 제외하고 데이터를 담아두지 않기 때문에 더 많은 메모리를 확보할 수 있고 더 많은 key들을 수용할 수 있다. 하나의 노드에 더 많은 key들을 담을 수 있기에 트리의 높이는 더 낮아진다. 그리고 풀 스캔 시 리프 노드는 모두 연결되어 있기 때문에 선형 탐색을 사용할 수 있어 B-Tree에 비해 빠르다.
from http://jinukix.tistory.com/105 by ccl(A) rewrite - 2021-11-18 10:26:26