B+tree, 원리부터 MySQL에 사용되는 방식까지

geeknews를 보다가 B+tree 이해에 도움되는 글을 읽어서 공유해봅니다. B+tree에 대해서 자세히 알지는 않아서 저장해뒀다가 이제야 읽어봤는데요. 작동 방식을 interactive한 방식의 애니메이션으로 표현해줘서 이해가 잘 됐습니다.


작동 방식 뿐만 아니라, MySQL(특히 InnoDB)에서는 B+tree가 어떻게 활용되는지, PK로 UUID 대신 Integer sequence(e.g. bigint auto increment)를 쓸 때 장점이 뭔지, 연속적인 키가 B+tree에서 동작할 때 Buffer Pool와 만나면 왜 효과적인지를 알 수 있습니다.


---


이해한 대로 적어보는 간단 요약


  • B+Tree

    • B-Tree 와 다르게 leaf 노드에만 key-value를 저장함

    • Non-leaf에는 key 와 자식 포인터만 저장

    • MySQL 추가 조건

      • Non-leaf 가 N개의 자식 포인터를 가지고 있음

      • next, previous 포인터가 있어서 각 레벨에서 이중연결리스트처럼 동작할 수 있음

  • PK로 UUID

    • UUIDv4는 mostly-random 128 bit interger

    • b+tree 에 UUID 키를 추가할때 어느 노드에 추가될지 예측할 수 없음

    • 그래서 여러 노드를 탐색해서 insert 위치를 찾아야함

  • PK로 Integer sequence(e.g. bigint auto increment)

    • 값을 추가할 때 항상 오른쪽(큰 값) 경로로 가면 됨. Leaf는 오른쪽에 추가되고 데이터는 삽입 시점을 기준으로 정렬됨

    • 많은 Insert가 있을 때 이전에 방문한 경로(노드, 페이지)를 다시 방문하기 때문에 I/O 요청을 많이 하지 않을 수 있음

  • PK choice

    • 입력된 시간 기준으로 범위 검색하는 경우, sequence는 검색된 노드가 나란히 놓여지는데(순차로 넣었으니까) 반해 uuid는 여러 페이지를 봐야함(여기저기 퍼져있으니까)

    • integer sequence가 노드당 더 많은 키를 넣을 수 있음 (UUID는 일반적으로 16바이트, BIGINT는 8바이트) -> 트리가 얕아지고 조회속도가 빨라짐

  • buffer pool

    • b+tree는 노드 크기를 원하는대로 설정할 수 있음. 일반적으로 InnoDB 페이지 크기인 16k로 설정됨

    • 쿼리 실행할 때 InnoDB는 row 단위로 읽는게 아니라 disk에서 전체 페이지를 읽어서 buffer pool에 저장함. buffer pool에 필요한 페이지가 없으면 disk I/O가 발생함

    • 그래서 이전에 방문한 노드(페이지)를 재활용할 수 있으면 buffer pool load&eviction이 줄어들어서 효과적임


https://planetscale.com/blog/btrees-and-database-indexes

B-trees and database indexes — PlanetScale

planetscale.com

B-trees and database indexes — PlanetScale

다음 내용이 궁금하다면?

또는

이미 회원이신가요?

2024년 9월 15일 오전 2:50

 • 

저장 27조회 2,442

댓글 0

    함께 읽은 게시물

    📰 OpenAI가 ChatGPT의 커넥터 기능을 업데이트하면서 MCP 지원을 추가했네요.

    ... 더 보기

    피클은 지난달 하루 200명씩 신규 유입, 불과 한 달 만에 사용자 수 5배라는 폭발적 성장세를 보이고 있다. 전체 이용자 중 70%가 미국, 20%가 유럽에 분포하며, 평균 주 5회 이상 회의·온라인 모임에 피클 아바타를 활용하고 있다.

    ... 더 보기

    AI 아바타 스타트업 ‘피클’, 시드 투자 60억원 유치

    조선비즈

    AI 아바타 스타트업 ‘피클’, 시드 투자 60억원 유치

    조회 226


    Longest Common Subsequence 자바스크립트 풀이

    ... 더 보기

    Longest Common Subsequence | 알고달레

    알고달레

    Longest Common Subsequence | 알고달레

    더불어민주당에선 대통령실 비서실장으로 지명된 강훈식 의원이 '경영권과 무관하게 상장사 지분 25% 이상을 확보할 경우 잔여 주식을 모두 공개매수해야 한다'는 내용의 자본시장법 개정안을 지난해 6월 발의했다. 대통령령으로 예외를 두겠다는 단서 조항을 달았지만 사실상 100% 의무공개매수를 도입을 추진하고 있다. 지난 정부가 추진한 '50%+1주 의무공개매수' 대비 한발 더 나간 제도라는 평가가 나온다.

    ... 더 보기

    '100% 의무공개매수' 도입 가능성에 긴장하는 PEF들 [이재명號 출범]

    n.news.naver.com

    '100% 의무공개매수' 도입 가능성에 긴장하는 PEF들 [이재명號 출범]

    "누가 왜 그렇게 하자고 했어요?"

    P

    ... 더 보기

    누가 왜 그렇게 하자고 했어요?

    Brunch Story

    누가 왜 그렇게 하자고 했어요?

    우선순위에 대한 고민

    SI,협약기반,셀프 서비스를 하면서 느끼는 커스터머및 장애 이슈대응

    ... 더 보기