"매 disk-friendly한 self-balancing search tree — 매 한 노드에 매 많은 key를 저장해 매 height를 minimize". 매 1970년 Bayer & McCreight가 IBM에서 design, 매 2026 PostgreSQL/MySQL InnoDB/SQLite의 default index, 매 NVMe SSD에서도 여전히 dominant — 매 sequential I/O와 cache line alignment 친화적.
매 핵심
매 invariant
매 node는 매 [t-1, 2t-1] keys 보유 (매 root만 예외).
매 internal node는 매 [t, 2t] children.
매 모든 leaf는 매 same depth.
매 keys 매 sorted within node.
매 B+ Tree variant (DB 표준)
매 internal node는 매 keys만 — 매 data는 매 leaf에만.
매 leaf끼리 매 linked list — 매 range scan O(k).
매 PostgreSQL/MySQL이 매 사용.
매 응용
RDBMS index (PostgreSQL btree).
Filesystem (ext4 HTree, NTFS).
KV store (LevelDB SST, RocksDB).
Vector DB metadata index.
💻 패턴
B-Tree node (Python)
classBTreeNode:def__init__(self,t,leaf=False):self.t=t# min degreeself.keys=[]self.children=[]self.leaf=leafdefsearch(self,k):i=0whilei<len(self.keys)andk>self.keys[i]:i+=1ifi<len(self.keys)andself.keys[i]==k:return(self,i)ifself.leaf:returnNonereturnself.children[i].search(k)
CREATEINDEXidx_users_emailONusersUSINGbtree(email);-- equality + range + sort 사용
EXPLAINSELECT*FROMusersWHEREemail>'a'ANDemail<'m';-- Index Scan using idx_users_email
SQLite WITHOUT ROWID (B-Tree direct)
CREATETABLEkv(kTEXTPRIMARYKEY,vBLOB)WITHOUTROWID;-- 매 data가 매 PK index 자체에 — 매 secondary lookup 제거