같은 범위 조건
SELECT * FROM products WHERE price BETWEEN 100 AND 500;
100
500

두 트리 모두 100까지는 찾을 수 있지만, 그다음에 500까지 읽는 경로가 성능을 가릅니다.

읽는 방식의 차이
B+Tree는 리프를 옆으로 따라가고,
B-Tree는 트리 안을 다시 오갑니다.

범위 검색의 핵심은 시작점 탐색보다 이후 구간을 얼마나 연속적으로 읽을 수 있는가입니다.

B+Tree

리프 노드가 연결되어 있어 찾은 뒤 바로 옆 범위를 이어 읽습니다.

B-Tree

연결된 리프가 없어 다음 키를 찾을 때마다 트리 경로를 다시 밟습니다.

100을 찾은 뒤
리프에 도착하면 시작점이 고정됩니다.
root → internal → leaf(100)

여기서부터는 같은 높이의 리프 구간만 따라가면 됩니다.

키를 찾은 뒤에도 트리 이동이 계속됩니다.
100 발견 → 다음 키를 위해 다시 분기 탐색

범위 전체를 읽으려면 여러 노드 경로를 계속 오르내립니다.

500까지 읽기
연결 리스트를 따라 순서대로 이동
leaf(100) → leaf → leaf → 500

옆 리프를 이어 읽는 구조라 범위가 넓어질수록 강점이 커집니다.

중위 순회처럼 여러 방향으로 이동
parent ↔ child ↔ parent ↔ sibling

필요한 키가 인접해 보여도 물리적으로는 다른 페이지를 자주 건드립니다.

디스크 I/O
연속 블록 기반의 시퀀셜 I/O

루트부터 시작점을 찾는 2~3번 I/O 이후에는 순차 읽기가 이어져 효율이 높습니다.

페이지 점프가 많은 랜덤 I/O

부모와 형제 노드 사이를 반복해서 이동하므로 범위 검색에서 성능 저하가 커집니다.

자주 나오는 범위 조건
WHERE date BETWEEN '2024-01-01' AND '2024-12-31'
WHERE salary >= 3000000
WHERE name LIKE '김%'