๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“ŒCS/DB

[DB] Index

by dar0m! 2021. 4. 4.

์ธ๋ฑ์Šค๋ž€?

์ธ๋ฑ์Šค == ๋ชฉ์ฐจ, RDBMS์—์„œ ๊ฒ€์ƒ‰ ์†๋„๋ฅผ ๋†’์ด๊ธฐ ์œ„ํ•œ ๊ธฐ์ˆ 

์ธ๋ฑ์Šค๋Š” ๊ฒฐ๊ตญ ์ง€์ •ํ•œ ์ปฌ๋Ÿผ๋“ค์„ ๊ธฐ์ค€์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ์ผ์ข…์˜ ๋ชฉ์ฐจ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์ธ๋ฑ์Šค๊ฐ€ ํ•„์š”ํ•œ ์ด์œ 

์ปดํ“จํ„ฐ๋Š” ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ(ํ…Œ์ด๋ธ” ๋“ฑ)๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ฆฌ๋Š”๋ฐ, ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์„ ๋•Œ ๋ฉ”๋ชจ๋ฆฌ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋‹ค๋ฉด ๋””์Šคํฌ์—์„œ ํ…Œ์ด๋ธ” ์ „์ฒด๋ฅผ ํ›‘์œผ๋ฉด์„œ ์ฐพ์•„์•ผ ํ•˜๊ณ  ์ด๋ฅผ Full Table Scan์ด๋ผ๊ณ  ํ•œ๋‹ค. ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ์—์„œ๋Š” ๊ต‰์žฅํžˆ ๋น„ํšจ์œจ์ ์ด๋‹ค.

๊ทธ๋ž˜์„œ Full Table Scan์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ชฉ์ฐจ์™€ ๊ฐ™์€ ์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค. 

ํŠน์ง•

์ธ๋ฑ์Šค์˜ ๊ตฌ์กฐ ์˜ˆ์‹œ (์ถœ์ฒ˜ : https://jojoldu.tistory.com/243)

  • ์ธ๋ฑ์Šค๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋œ๋‹ค.
  • B-Tree ํ˜•ํƒœ๋กœ ์ €์žฅ๋จ ์ž์‹ ๋…ธ๋“œ๊ฐ€ 2๊ฐœ ์ด์ƒ
  • ๋””์Šคํฌ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” Page(Block)์„ ๊ฐ€์žฅ ๊ธฐ๋ณธ๋‹จ์œ„ ๋กœ ์‚ผ๋Š”๋‹ค. ๋””์Šคํฌ ์ฝ๊ธฐ ์“ฐ๊ธฐ ์ž‘์—…์˜ ์ตœ์†Œ๋‹จ์œ„.
  • ์ธ๋ฑ์Šค๋„ ํŽ˜์ด์ง€ ๋‹จ์œ„๋กœ ๊ด€๋ฆฌ๋˜๋ฉฐ, ๊ทธ๋ฆผ์ƒ์˜ ๋…ธ๋“œ๊ฐ€ ํ•˜๋‚˜์˜ ํŽ˜์ด์ง€๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
  • ์ธ๋ฑ์Šค๋Š” Range Scan(๋ฆฌํ”„ ๋ธ”๋ก์—์„œ ์Šค์บ” ์‹œ์ž‘ ์ง€์ ๋ถ€ํ„ฐ ์ค‘๊ฐ„์— ์ฐพ๊ณ ์ž ํ•˜๋Š” ๋…ธ๋“œ๋ฅผ ์ฐพ์œผ๋ฉด ํƒ์ƒ‰์„ ๋ฉˆ์ถค)์„ ํ•˜๋Š”๋ฐ ์ด๋Š” Full Table Scan๊ณผ ๋ฐ˜๋Œ€๋˜๋Š” ๊ฐœ๋…์ด๊ณ ๋ฉฐ ๋” ํšจ์œจ์ ์ด๊ฒŒ ๋œ๋‹ค.
  • ์•ฝ 10%์˜ ์ถ”๊ฐ€ ์ €์žฅ ๊ณต๊ฐ„ ํ•„์š” 

์ข…๋ฅ˜

Clustered

  • ์˜ˆ) ์ฑ…์—์„œ ๋ฐ”๋กœ ํŽ˜์ด์ง€๋ฅผ ์•„๋Š” ๊ฒƒ
  • ๊ตฐ์ง‘ํ™” : ์ธ๋ฑ์Šค์™€ ๋ฐ์ดํ„ฐ๊ฐ€ ์—ฐ๊ฒฐ๋œ ํ˜•ํƒœ
  • ์ •๋ ฌ๋˜์–ด ์ €์žฅ๋œ๋‹ค.
  • ํ•œ ํ…Œ์ด๋ธ”์— ํ•˜๋‚˜๋งŒ ์กด์žฌํ•  ์ˆ˜ ์žˆ๋‹ค.(์ค‘๋ณต ๋ถˆ๊ฐ€)
  • ํ…Œ์ด๋ธ”์˜ PK์— ๋Œ€ํ•ด์„œ๋งŒ ์ ์šฉ๋œ๋‹ค.(PK๋Š” ํด๋Ÿฌ์Šคํ„ฐ๋“œ ์ธ๋ฑ์Šค์˜ ๊ธฐ์ค€)
    • PK์— ์˜ํ•ด ๋ ˆ์ฝ”๋“œ ์ €์žฅ ์œ„์น˜๊ฐ€ ๊ฒฐ์ •๋˜๋ฉฐ PK๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๋ฉด ๋ฌผ๋ฆฌ์ ์ธ ์ €์žฅ์œ„์น˜๊ฐ€ ๋ฐ”๋€Œ๊ณ  ๋žœ๋ค ์•ก์„ธ์Šค๊ฐ€ ๋งŽ์ด ๋ฐœ์ƒํ•˜๋ฉฐ IO์ฆ๊ฐ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— PK๋ฅผ ์‹ ์ค‘ํ•˜๊ฒŒ ๊ฒฐ์ •ํ•ด์•ผ ํ•œ๋‹ค.
  • ๋ฒ”์œ„๊ฒ€์ƒ‰์— ๊ฐ•๋ ฅ O(1)
  • ๋…ผํด๋Ÿฌ์Šคํ„ฐ๋“œ ์ธ๋ฑ์Šค๋ณด๋‹ค ๋น ๋ฅด๋‹ค.
    • Clustered index๋Š” leaf node์— row data๋ฅผ ๊ฐ–๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Non-clustered index(secondary index)๋ณด๋‹ค access๊ฐ€ ๋น ๋ฆ„
  • ์ค‘๊ฐ„์‚ฝ์ž…ํ•˜๋Š” ๊ฒฝ์šฐ์— ์„ฑ๋Šฅ์— ์•…์˜ํ–ฅ

Non Clustered

  • ์˜ˆ) ์ฑ…์—์„œ ๋ชฉ์ฐจ๋ฅผ ๋ณด๋Š” ๊ฒƒ
  • ๋น„๊ตฐ์ง‘ํ™” : ๋ฐ์ดํ„ฐ์™€ ์—ฐ๊ฒฐ๋˜์–ด์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋‹ค๋ฅธ ์ธ๋ฑ์Šค์™€ ๊ฐ„์ ‘์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์Œ.
    • Non Clustered index์˜ leaf node์—๋Š” row data์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” primary key๊ฐ€ ์ €์žฅ๋˜๋ฏ€๋กœ ๋‘๋ฒˆ์˜ access๊ฐ€ ํ•„์š”
    • primary key๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•œ access -> clustered index(๋Œ€๊ฒŒ pk)๋ฅผ ์ด์šฉํ•˜์—ฌ row data๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•œ access
  • ์ •๋ ฌ๋˜์–ด์žˆ์ง€ ์•Š์•„์„œ ๋ฐ์ดํ„ฐ์™€ ์ˆœ์„œ๋Š” ์ƒ๊ด€์ด ์—†์Œ
  • ๋ฐ์ดํ„ฐ์™€๋„ ๊ด€๋ จ ์—†์Œ
  • ํ•œ ํ…Œ์ด๋ธ”์— ์—ฌ๋Ÿฌ๊ฐœ ๊ฐ€๋Šฅ

 

์ธ๋ฑ์Šค ํ™œ์šฉ

๊ตฌ๋ถ„ ๋‚ด์šฉ
SELECT from, where ์ ˆ์ด ์žˆ์„ ๋•Œ ์„ฑ๋Šฅ ํ–ฅ์ƒ
INSERT ์˜คํžˆ๋ ค ์„ฑ๋Šฅ์„ ์ €ํ•˜์‹œํ‚ฌ ์ˆ˜ ์žˆ์Œ.

์ธ๋ฑ์Šค๋Š” ์ •๋ ฌ์ด ๋œ ์ƒํƒœ๋กœ ์ €์žฅ์ด ๋˜์–ด์•ผ ํ•˜๊ณ , ์ธ๋ฑ์Šค๋Š” ํ…Œ์ด๋ธ”๊ณผ ๋ณ„๋„์˜ ๊ฐ์ฒด๋ผ์„œ ๋ฐ์ดํ„ฐ๋ฅผ ํ…Œ์ด๋ธ”๊ณผ ์ธ๋ฑ์Šค์— ๊ฐ๊ฐ ์‚ฝ์ž…์„ ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‚ญ๋น„๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.
UPDATE ์˜คํžˆ๋ ค ์„ฑ๋Šฅ์„ ์ €ํ•˜์‹œํ‚ฌ ์ˆ˜ ์žˆ์Œ.

์ธ๋ฑ์Šค์—๋Š” ์—…๋ฐ์ดํŠธ๋ผ๋Š” ๊ฐœ๋…์ด ์—†์–ด์„œ ํ…Œ์ด๋ธ”์— ์—…๋ฐ์ดํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ DELETE ํ›„ INSERT๋ฅผ ์ž‘์—…ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ถ€ํ•˜๊ฐ€ ํฌ๋‹ค.
DELETE ์˜คํžˆ๋ ค ์„ฑ๋Šฅ์„ ์ €ํ•˜์‹œํ‚ฌ ์ˆ˜ ์žˆ์Œ.

์‹ค์ œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์šฐ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ธ๋ฑ์Šค ์•ˆ์— '์‚ฌ์šฉ์•ˆํ•จ'์ด๋ผ๋Š” ํ‘œ์‹œ๋ฅผ ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๊ณต๊ฐ„๋‚ญ๋น„๊ฐ€ ์žˆ๋‹ค.

insert, update, delete (Command)์˜ ์„ฑ๋Šฅ์„ ํฌ์ƒํ•˜๊ณ  ๋Œ€์‹  select (Query)์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚จ๋‹ค.
์—ฌ๊ธฐ์„œ ์ฃผ์˜ํ•  ์ ์€ update, delete ํ–‰์œ„๊ฐ€ ๋Š๋ฆฐ๊ฒƒ์ด์ง€, update, delete๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋Š”๊ฒƒ์€ ์ธ๋ฑ์Šค๊ฐ€ ์žˆ์œผ๋ฉด ๋น ๋ฅด๊ฒŒ ์กฐํšŒ๊ฐ€ ๋œ๋‹ค.

์ธ๋ฑ์Šค๊ฐ€ ์—†๋Š” ์ปฌ๋Ÿผ์„ ์กฐ๊ฑด์œผ๋กœ update, delete๋ฅผ ํ•˜๊ฒŒ ๋˜๋ฉด ๊ต‰์žฅํžˆ ๋Š๋ ค ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œ ํ•ด์•ผํ•˜๋Š” ์ƒํ™ฉ์—์„  ์ธ๋ฑ์Šค๋กœ ์ง€์ •๋œ ์ปฌ๋Ÿผ์„ ๊ธฐ์ค€์œผ๋กœ ์ง„ํ–‰ํ•˜๋Š”๊ฒƒ์„ ์ถ”์ฒœ

๋”ฐ๋ผ์„œ, ์ƒํ™ฉ์— ๋”ฐ๋ผ ์ƒ๋Œ€์ ์ธ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฌด์กฐ๊ฑด ์ธ๋ฑ์Šค๋ฅผ ์“ด๋‹ค๊ณ  ํšจ์œจ์ ์ธ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.

์ •๋ฆฌ

์‚ฌ์šฉํ•˜๋ฉด ์ข‹์€ ๊ฒฝ์šฐ

  • Where ์ ˆ์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” Column
  • ์™ธ๋ž˜ํ‚ค๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” Column
  • Join์— ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” Column

Index ์‚ฌ์šฉ์„ ํ”ผํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ

  • Data ์ค‘๋ณต๋„๊ฐ€ ๋†’์€ Column
  • DML์ด ์ž์ฃผ ์ผ์–ด๋‚˜๋Š” Column

 

์ธ๋ฑ์Šค Column ์„ค์ • ๊ธฐ์ค€

Cardinality(๊ธฐ์ˆ˜์„ฑ)๊ฐ€ ๋†’์€ ๊ฒƒ

๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„๋ฅ˜ํ•  ๊ธฐ์ค€์„ ์„ ํƒํ•  ๋•Œ '์นด๋””๋„๋ฆฌํ‹ฐ'๋ผ๋Š” ๊ฐœ๋…์ด ๋“ฑ์žฅํ•œ๋‹ค. ์นด๋””๋„๋ฆฌํ‹ฐ๋Š” ๊ธฐ์ˆ˜์„ฑ ์ฆ‰, ์–ด๋Š ๊ทธ๋ฃน์— ์†ํ•˜๋Š” ์š”์†Œ์˜ ์ˆ˜๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ ์นด๋””๋„๋ฆฌํ‹ฐ๊ฐ€ ๋†’์€ ๊ฒƒ์ด ๋ฐ”๋กœ ๊ธฐ์ค€์ด ๋œ๋‹ค.

์„ฑ๋ณ„ < ๋‹‰๋„ค์ž„ < ์ฃผ๋ฏผ๋ฒˆํ˜ธ 

์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๊ฐˆ ์ˆ˜๋ก ์นด๋””๋„๋ฆฌํ‹ฐ๊ฐ€ ๋†’๋‹ค.
์ฃผ๋ฏผ๋ฒˆํ˜ธ๋Š” ๊ณ ์œ ๊ฐ’์ด๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ๋žŒ ์ˆ˜ ๋งŒํผ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋–ค ๊ธฐ์ค€๋ณด๋‹ค๋„ ์นด๋””๋„๋ฆฌํ‹ฐ๊ฐ€ ๋†’๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋ ‡๊ฒŒ ์นด๋””๋„๋ฆฌํ‹ฐ๊ฐ€ ๋†’์€ ๊ฐ’์„ ์ธ๋ฑ์Šค ์ปฌ๋Ÿผ ๊ธฐ์ค€์œผ๋กœ ์‚ผ์•„์•ผ ์›ํ•˜๋Š” ๊ฐ’์„ ์‰ฝ๊ฒŒ ๊ฑธ๋Ÿฌ๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

 

์ธ๋ฑ์Šค ๊ตฌ์กฐ

MySQL์€ BTREE(B-Tree ๋ฐ B+Tree) ๋ฐ HASH ์ธ๋ฑ์Šค๋ฅผ ๋ชจ๋‘ ์‚ฌ์šฉํ•œ๋‹ค.

B-Tree

๋Œ€๋ถ€๋ถ„์˜ MySQL ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์˜ ๊ธฐ๋ณธ ์ƒ‰์ธ ๊ตฌ์กฐ

B-Tree๋Š” ๋…ธ๋“œ๊ฐ€ inorder traversal์—์„œ ์ •๋ ฌ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ž์ฒด ๊ท ํ˜• ํŠธ๋ฆฌ๋กœ ์•Œ๋ ค์ ธ ์žˆ๋‹ค. B-ํŠธ๋ฆฌ์—์„œ ๋…ธ๋“œ๋Š” ๋‘ ๊ฐœ ์ด์ƒ์˜ ์ž์‹์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค(์ตœ๋Œ€ M๊ฐœ์˜ ์ž์‹, M์ฐจ B-Tree). B-Tree์˜ ๋†’์ด๋Š” logM N์ด๋‹ค(์—ฌ๊ธฐ์„œ 'M'์€ ํŠธ๋ฆฌ์˜ ์ฐจ์ˆ˜์ด๊ณ  N์€ ๋…ธ๋“œ ์ˆ˜).  

์—…๋ฐ์ดํŠธํ•  ๋•Œ๋งˆ๋‹ค ๋†’์ด๊ฐ€ ์ž๋™์œผ๋กœ ์กฐ์ •๋œ๋‹ค. B-ํŠธ๋ฆฌ์—์„œ ๋ฐ์ดํ„ฐ๋Š” ์™ผ์ชฝ์ด ๊ฐ€์žฅ ๋‚ฎ์€ ๊ฐ’, ์˜ค๋ฅธ์ชฝ์ด ๊ฐ€์žฅ ๋†’์€ ๊ฐ’์œผ๋กœ ํŠน์ • ์ˆœ์„œ๋กœ ์ •๋ ฌ๋œ๋‹ค. B-Tree์— ๋ฐ์ดํ„ฐ๋‚˜ ํ‚ค๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ๊ฒƒ์€ ์ด์ง„ ํŠธ๋ฆฌ๋ณด๋‹ค ๋ณต์žกํ•˜๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ๊ฐ€์žฅ ์ž์ฃผ ์•ก์„ธ์Šคํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฃจํŠธ ๋…ธ๋“œ์— ๋” ๊ฐ€๊นŒ์šธ ๋•Œ B-Tree๊ฐ€ ๋” ์ž˜ ์ˆ˜ํ–‰๋œ๋‹ค

ํŠน์ง•

  • ๋…ธ๋“œ๋Š” ์ตœ๋Œ€ ๊ฐœ ๋ถ€ํ„ฐ ๊ฐœ ๊นŒ์ง€์˜ ์ž์‹์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋…ธ๋“œ์—๋Š” ์ตœ๋Œ€ ๊ฐœ ๋ถ€ํ„ฐ ๊ฐœ์˜ ํ‚ค๊ฐ€ ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋…ธ๋“œ์˜ ํ‚ค๊ฐ€ ๊ฐœ๋ผ๋ฉด ์ž์‹์˜ ์ˆ˜๋Š” ๊ฐœ ์ž…๋‹ˆ๋‹ค.
  • ์ตœ์†Œ์ฐจ์ˆ˜๋Š” ์ž์‹์ˆ˜์˜ ํ•˜ํ•œ๊ฐ’์„ ์˜๋ฏธํ•˜๋ฉฐ, ์ตœ์†Œ์ฐจ์ˆ˜๊ฐ€ t๋ผ๋ฉด ์„ ๋งŒ์กฑํ•ฉ๋‹ˆ๋‹ค.
    (์ตœ์†Œ์ฐจ์ˆ˜ ๊ฐ€ 2๋ผ๋ฉด 3์ฐจ BํŠธ๋ฆฌ์ด๋ฉฐ, key์˜ ํ•˜ํ•œ์€ 1๊ฐœ์ž…๋‹ˆ๋‹ค.)

๊ฒ€์ƒ‰, ์‚ฝ์ž…, ์‚ญ์ œ ๊ณผ์ •

 

[์ž๋ฃŒ๊ตฌ์กฐ] ๊ทธ๋ฆผ์œผ๋กœ ์•Œ์•„๋ณด๋Š” B-Tree

BํŠธ๋ฆฌ๋Š” ์ด์ง„ํŠธ๋ฆฌ์—์„œ ๋ฐœ์ „๋˜์–ด ๋ชจ๋“  ๋ฆฌํ”„๋…ธ๋“œ๋“ค์ด ๊ฐ™์€ ๋ ˆ๋ฒจ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋„๋ก ์ž๋™์œผ๋กœ ๋ฒจ๋Ÿฐ์Šค๋ฅผ ๋งž์ถ”๋Š” ํŠธ๋ฆฌ์ž…๋‹ˆ๋‹ค.

velog.io

B+Tree

B+Tree ๊ตฌ์กฐ๋Š” B ํŠธ๋ฆฌ ๊ตฌ์กฐ์™€ ์œ ์‚ฌํ•˜๋‹ค.  InnoDB ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์€ B+Tree ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธ๋ฑ์Šค๋ฅผ ์ €์žฅํ•œ๋‹ค.

B+Tree๋Š” ๋ฐ์ดํ„ฐ ํฌ์ธํ„ฐ๋ฅผ ํŠธ๋ฆฌ์˜ ๋ฆฌํ”„ ๋…ธ๋“œ์—๋งŒ ์ €์žฅํ•˜์—ฌ ์ธ๋ฑ์‹ฑ์— ์‚ฌ์šฉ๋˜๋Š” B-ํŠธ๋ฆฌ์˜ ๋‹จ์ ์„ ์ œ๊ฑฐํ•œ๋‹ค. ๋”ฐ๋ผ์„œ B+ ํŠธ๋ฆฌ์˜ ๋ฆฌํ”„ ๋…ธ๋“œ ๊ตฌ์กฐ๋Š” B ํŠธ๋ฆฌ์˜ ๋‚ด๋ถ€ ๋…ธ๋“œ ๊ตฌ์กฐ์™€ ์ƒ๋‹นํžˆ ๋‹ค๋ฅด๋‹ค. 

์—ฌ๊ธฐ์„œ ์œ ์˜ํ•  ์ ์€ ๋ฐ์ดํ„ฐ ํฌ์ธํ„ฐ๋Š” ๋ฆฌํ”„ ๋…ธ๋“œ์—๋งŒ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฆฌํ”„ ๋…ธ๋“œ์— ์•ก์„ธ์Šคํ•˜๋ ค๋ฉด ๋””์Šคํฌ ํŒŒ์ผ ๋ธ”๋ก์— ๋Œ€ํ•œ ํ•ด๋‹น ๋ฐ์ดํ„ฐ ํฌ์ธํ„ฐ์™€ ํ•จ๊ป˜ ๋ชจ๋“  ํ‚ค ๊ฐ’์„ ๋ฐ˜๋“œ์‹œ ์ €์žฅํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ ์ด๋‹ค. 

๋˜ํ•œ ๋ฆฌํ”„ ๋…ธ๋“œ๋Š” ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ ํ˜•ํƒœ๋ฅผ ๋„๊ณ  ์žˆ๋‹ค. B-Tree๋Š” ๋ฆฌํ”„ ๋…ธ๋“œ๋ฅผ ๊ฒ€์‚ฌํ•  ๋•Œ, ๋‹ค์‹œ ๋ฃจํŠธ๋…ธ๋“œ๋ถ€ํ„ฐ ๊ฒ€์‚ฌํ•ด์•ผ ํ•œ๋‹ค๋ฉด, B+Tree๋Š” ๋ฆฌํ”„๋…ธ๋“œ์—์„œ ์„ ํ˜•๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์–ด ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ์ค„์–ด๋“ ๋‹ค.

๋ฆฌํ”„ ๋…ธ๋“œ์˜ ํ‚ค ๊ฐ’ ์ค‘ ์ผ๋ถ€๋Š” ๋‚ด๋ถ€ ๋…ธ๋“œ์—๋„ ๋‚˜ํƒ€๋‚˜ ๋‹จ์ˆœํžˆ ๋ ˆ์ฝ”๋“œ ๊ฒ€์ƒ‰์„ ์ œ์–ดํ•˜๋Š” โ€‹โ€‹๋งค๊ฐœ์ฒด ์—ญํ• ์„ ํ•œ๋‹ค.

ํŠน์ง•(B-Tree์™€ ๋™์ผ)

  • ๋…ธ๋“œ๋Š” ์ตœ๋Œ€ ๊ฐœ ๋ถ€ํ„ฐ ๊ฐœ ๊นŒ์ง€์˜ ์ž์‹์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋…ธ๋“œ์—๋Š” ์ตœ๋Œ€ ๊ฐœ ๋ถ€ํ„ฐ ๊ฐœ์˜ ํ‚ค๊ฐ€ ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋…ธ๋“œ์˜ ํ‚ค๊ฐ€ ๊ฐœ๋ผ๋ฉด ์ž์‹์˜ ์ˆ˜๋Š” ๊ฐœ ์ž…๋‹ˆ๋‹ค.
  • ์ตœ์†Œ์ฐจ์ˆ˜๋Š” ์ž์‹์ˆ˜์˜ ํ•˜ํ•œ๊ฐ’์„ ์˜๋ฏธํ•˜๋ฉฐ, ์ตœ์†Œ์ฐจ์ˆ˜๊ฐ€ t๋ผ๋ฉด ์„ ๋งŒ์กฑํ•ฉ๋‹ˆ๋‹ค.
    (์ตœ์†Œ์ฐจ์ˆ˜ ๊ฐ€ 2๋ผ๋ฉด 3์ฐจ BํŠธ๋ฆฌ์ด๋ฉฐ, key์˜ ํ•˜ํ•œ์€ 1๊ฐœ์ž…๋‹ˆ๋‹ค.)

๊ฒ€์ƒ‰, ์‚ฝ์ž…, ์‚ญ์ œ ๊ณผ์ •

 

[์ž๋ฃŒ๊ตฌ์กฐ] ๊ทธ๋ฆผ์œผ๋กœ ์•Œ์•„๋ณด๋Š” B+Tree

์ •๋ ฌ๋œ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜๊ณ , ๋ฉ€ํ‹ฐ๋ ˆ๋ฒจ ์ธ๋ฑ์‹ฑ์„ ํ†ตํ•œ ๋น ๋ฅธ ๊ฒ€์ƒ‰๊ณผ ์„ ํ˜•ํƒ์ƒ‰๊นŒ์ง€ ๊ฐ€๋Šฅํ•œ ์‹ค์ „ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ B+ ํŠธ๋ฆฌ์ž…๋‹ˆ๋‹ค.

velog.io

B-Tree vs B+Tree

S.NO B-Tree B+Tree
1 ๋ชจ๋“  ๋‚ด๋ถ€ ๋ฐ ๋ฆฌํ”„ ๋…ธ๋“œ์—๋Š” ๋ฐ์ดํ„ฐ ํฌ์ธํ„ฐ๊ฐ€ ์žˆ๋‹ค. ๋ฆฌํ”„ ๋…ธ๋“œ์—๋งŒ ๋ฐ์ดํ„ฐ ํฌ์ธํ„ฐ๊ฐ€ ์žˆ๋‹ค.
2 ๋ชจ๋“  ํ‚ค๋ฅผ ๋ฆฌํ”„์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ฒ€์ƒ‰์— ๋” ๋งŽ์€ ์‹œ๊ฐ„์ด ์†Œ์š”๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. ๋ชจ๋“  ํ‚ค๋Š” ๋ฆฌํ”„ ๋…ธ๋“œ์— ์žˆ์œผ๋ฏ€๋กœ ๊ฒ€์ƒ‰์ด ๋” ๋น ๋ฅด๊ณ  ์ •ํ™•ํ•˜๋‹ค.
3 ํŠธ๋ฆฌ์—์„œ ํ‚ค์˜ ๋ณต์ œ๊ฐ€ ์œ ์ง€๋˜์ง€ ์•Š๋Š”๋‹ค. ํ‚ค์˜ ์ค‘๋ณต์ด ์œ ์ง€๋˜๊ณ  ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ๋ฆฌํ”„์— ์žˆ๋‹ค.
4 ์‚ฝ์ž…ํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์ด ๋” ๊ฑธ๋ฆฌ๊ณ  ์˜ˆ์ธกํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ์‚ฝ์ž…์ด ๋” ์‰ฝ๊ณ  ๊ฒฐ๊ณผ๋Š” ํ•ญ์ƒ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.
5 ๋‚ด๋ถ€ ๋…ธ๋“œ์˜ ์‚ญ์ œ๋Š” ๋งค์šฐ ๋ณต์žกํ•˜๊ณ  ํŠธ๋ฆฌ๊ฐ€ ๋งŽ์€ ๋ณ€ํ˜•์„ ๊ฑฐ์ณ์•ผ ํ•œ๋‹ค. ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ๋ฆฌํ”„์—์„œ ๋ฐœ๊ฒฌ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ๋…ธ๋“œ์˜ ์‚ญ์ œ๊ฐ€ ์‰ฝ๋‹ค.
6 ๋ฆฌํ”„ ๋…ธ๋“œ๋Š” ๊ตฌ์กฐ์  ์—ฐ๊ฒฐ ๋ชฉ๋ก์œผ๋กœ ์ €์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค. ๋ฆฌํ”„ ๋…ธ๋“œ๋Š” ๊ตฌ์กฐ์  ์—ฐ๊ฒฐ ๋ชฉ๋ก์œผ๋กœ ์ €์žฅ๋œ๋‹ค.
7 ์ค‘๋ณต ๊ฒ€์ƒ‰ ํ‚ค๊ฐ€ ์—†๋‹ค. ์ค‘๋ณต ๊ฒ€์ƒ‰ ํ‚ค๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.

Hash

๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํ‚ค-๊ฐ’ ์„ธํŠธ๊ฐ€ ์žˆ๊ณ , ํ•ด์‹œ ํ•จ์ˆ˜๋Š” ์‹ค์ œ ๋ฐ์ดํ„ฐ ๋ฒ„ํ‚ท์ด ์ €์žฅ๋œ ์ฃผ์†Œ๋ฅผ ๊ณ„์‚ฐํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ํ‚ค-๊ฐ’๊ณผ ๊ด€๋ จ๋œ ๋ ˆ์ฝ”๋“œ์˜ ์œ„์น˜๊ฐ€ ํ‘œ์‹œ๋œ๋‹ค.

๊ฐ’์€ ํ•ด์‹œ ํ•จ์ˆ˜์˜ ๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฒ„ํ‚ท์— ์ €์žฅ๋œ๋‹ค. ๊ฐ’์„ ๊ฒ€์ƒ‰ํ•˜๋ ค๋ฉด ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ๋ฒ„ํ‚ท ์ฃผ์†Œ๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ , ์ฐพ์œผ๋ฉด ๋. ์ฐพ์ง€ ๋ชปํ•˜๋ฉด ์ธ๋ฑ์Šค์— ์—†๋‹ค๋Š” ์˜๋ฏธ๋‹ค.

์ƒˆ ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๋„ ์œ ์‚ฌํ•˜๊ฒŒ ๋™์ž‘ํ•œ๋‹ค.

 

์ฐธ๊ณ 

https://velog.io/@emplam27/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-%EA%B7%B8%EB%A6%BC%EC%9C%BC%EB%A1%9C-%EC%95%8C%EC%95%84%EB%B3%B4%EB%8A%94-B-Plus-Tree

'๐Ÿ“ŒCS > DB' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[DB] ์ •๊ทœํ™”  (0) 2021.04.11
[DB] N + 1 ๋ฌธ์ œ  (0) 2021.04.11
[SQL] ๋‹ค์ค‘์ •๋ ฌ ORDER BY  (1) 2020.01.09
[MySQL] Resotre Workspace ์˜ค๋ฅ˜  (0) 2019.12.10
[Sequelize v5] ์‹œํ€„๋ผ์ด์ฆˆ find ํ•จ์ˆ˜ ์˜ค๋ฅ˜  (0) 2019.05.29

๋Œ“๊ธ€