유튜브블로그Top 10
내 프로필

데브허브 안내
소개업데이트 소식

데브허브 커뮤니티

[10분 테코톡] 프리, 말론의 B-Tree 인덱스와 클러스터링 인덱스

우아한테크

2025. 7. 25.

0

#db
  • 데이터베이스 인덱스는 조회 성능을 크게 향상시키는 핵심 객체이며, B-Tree 자료구조를 통해 효율적으로 관리됩니다. 🚀
  • 순차 탐색(O(N))의 비효율성을 극복하기 위해 이진 트리가 도입되었으나, 트리의 불균형 및 깊이 증가로 인한 성능 저하 문제가 있었습니다. 📉
  • B-Tree는 대량의 인덱스 관리를 위해 고안된 '균형 트리'로, 항상 균형을 유지하고 하나의 노드에 여러 키와 자식을 가질 수 있어 평균 조회 속도가 빠릅니다. 🌳
  • B-Tree는 단일 키 조회에는 효율적이지만, 범위 검색 시 인접하지 않은 노드에 접근하기 위해 루트 노드부터 재탐색해야 하는 단점이 있습니다. 🔍
  • B+Tree는 B-Tree의 범위 검색 취약점을 보완한 자료구조로, 모든 키와 레코드 주소를 리프 노드에만 저장하고, 리프 노드들이 서로 연결되어 있어 범위 검색에 매우 효율적입니다. 🔗
  • 현대 DBMS(MySQL, Oracle)는 인덱스 관리에 B+Tree를 사용하며, 삽입 시 'Split' 연산을 통해 트리의 균형을 자동으로 유지합니다. 🛠️
  • 클러스터링 인덱스는 MySQL에서 B-Tree를 활용하는 방식으로, 인덱스 키(주로 PK)와 실제 데이터 레코드를 물리적으로 묶어 정렬된 상태로 저장합니다. 📦
  • 클러스터링 인덱스가 없는 경우, 인덱스는 레코드의 물리적 주소를 가리키며, 데이터는 정렬되지 않아 비효율적인 디스크 I/O가 발생할 수 있습니다. 🗺️
  • 클러스터링 인덱스는 PK를 기준으로 데이터 레코드를 정렬하여 저장하므로, PK 기반의 조회나 범위 검색 시 디스크의 순차 접근을 가능하게 하여 성능을 극대화합니다. 🏎️
  • PK는 데이터베이스 내에서 레코드의 '논리적 주소' 역할을 하며, 의미 있는 PK 선택은 쿼리 성능에 매우 중요합니다. 🔑
  • MySQL의 Multi-Range Read(MRR) 기능은 비클러스터링 인덱스 사용 시 얻은 PK들을 메모리에서 정렬한 후 클러스터링 인덱스를 탐색하여 효율적인 데이터 접근을 돕습니다. 🧠

Recommanded Videos