Welcome! ๐Ÿ™‹โ€โ™‚๏ธ View more

Engineering ๐Ÿ’ป/CS

[DB] Index๋ž€ (feat. B+-Tree)

DeepFlame 2022. 2. 13. 22:28

DB์˜ ์„ฑ๋Šฅ


DB๋Š” ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ ๋ชจ์Œ์ด๊ธฐ ๋•Œ๋ฌธ์—, ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์กฐํšŒ/์ €์žฅ๋˜๋Š” ์ผ์ด ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ฐœ์ƒํ•œ๋‹ค. 
๊ทธ๋ฆฌ๊ณ  ์ด๋ฅผ ๋น ๋ฅด๊ฒŒ ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ๋ฌด์—‡๋ณด๋‹ค ์ค‘์š”ํ•˜๋‹ค. ์ด๋•Œ DB์˜ ์„ฑ๋Šฅ๊ณผ ๊ด€๋ จ๋œ ํ•ต์‹ฌ์ด ๋””์Šคํฌ I/O๋ฅผ ์–ด๋–ป๊ฒŒ ์ค„์ด๋А๋ƒ์ด๋‹ค.

๋””์Šคํฌ I/O = ํ”Œ๋ž˜ํ„ฐ(์›ํŒ)์„ ๋Œ๋ฆฌ๊ณ , ๋””์Šคํฌ ํ—ค๋”๋ฅผ ์ด๋™ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

๋ฌผ๋ก  ์ˆœ์ฐจ I/O๊ฐ€ ๋žœ๋ค I/O๋ณด๋‹ค ๋น ๋ฅด๋‹ค. ํ•˜์ง€๋งŒ ํ˜„์‹ค์€ ๋Œ€๋ถ€๋ถ„ ๋žœ๋ค I/O์ด๋ฉฐ, ์ด๋ฅผ ์ˆœ์ฐจ๋กœ ๋ฐ”๊พธ์–ด ๋ณด์ž๋Š” ์•„์ด๋””์–ด์—์„œ Index์™€ ์ฟผ๋ฆฌ ํŠœ๋‹์ด ๋‚˜ํƒ€๋‚ฌ๋‹ค.

 

 

Index๋ž€?


Index๋ž€ ์ถ”๊ฐ€์ ์ธ ์ €์žฅ ๊ณต๊ฐ„์„ ํ™œ์šฉํ•˜์—ฌ DB ํ…Œ์ด๋ธ”์˜ ๊ฒ€์ƒ‰ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

๋งŒ์•ฝ DB ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•ด์„œ ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ค๋ ค๋ฉด ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆด ๊ฒƒ์ด๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ์นผ๋Ÿผ ๊ฐ’๊ณผ ํ•ด๋‹น ๋ ˆ์ฝ”๋“œ์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง„ ์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“ค์–ด ๋ฐ์ดํ„ฐ ํƒ์ƒ‰์„ ๋น ๋ฅด๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

 

์ด๋Š” ์กฐํšŒ(Select)์™ธ ์—๋„ ์กฐ๊ฑด๋ฌธ์ด ์žˆ๋Š” Update๋‚˜ Delete์˜ ์„ฑ๋Šฅ์—๋„ ์˜ํ–ฅ์„ ์ค€๋‹ค.

// Mang์ด๋ผ๋Š” ์ด๋ฆ„์„ ์—…๋ฐ์ดํŠธ ํ•ด์ฃผ๊ธฐ ์œ„ํ•ด์„œ๋Š” Mang์„ ์กฐํšŒํ•ด์•ผ ํ•œ๋‹ค. 
UPDATE USER SET NAME = 'MangKyu' WHERE NAME = 'Mang';

 

Index๋Š” ๋น ๋ฅธ ํƒ์ƒ‰์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ํ•ญ์ƒ ์ •๋ ฌ๋œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ INSERT, UPDATE, DELETE์—์„œ ์ถ”๊ฐ€์ ์ธ ์—ฐ์‚ฐ์ด ํ•„์š”ํ•˜๋‹ค. 

 

์ด๋ฅผ ๊ฐ„๋‹จํžˆ ์ •๋ฆฌํ•˜์ž๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค. 

๐Ÿ˜€ ์žฅ์ 

  • ํ…Œ์ด๋ธ”์„ ์กฐํšŒํ•˜๋Š” ์†๋„์™€ ์„ฑ๋Šฅ ํ–ฅ์ƒ
  • ์‹œ์Šคํ…œ ๋ถ€ํ•˜๋ฅผ ์ค„์ž„

 

๐Ÿ˜ซ ๋‹จ์ 

  • ์ธ๋ฑ์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์ถ”๊ฐ€ ์ €์žฅ ๊ณต๊ฐ„ ํ•„์š”
  • ์ธ๋ฑ์Šค๋ฅผ ํ•ญ์ƒ ์ •๋ ฌ๋œ ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜๊ธฐ์— ์ถ”๊ฐ€ ์ž‘์—…์ด ํ•„์š”
  • ์ธ๋ฑ์Šค๋ฅผ ์ž˜๋ชป ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์—ญํšจ๊ณผ๊ฐ€ ๋‚  ์ˆ˜ ์žˆ์Œ

 

๐Ÿค” Index ๊ถŒ์žฅ ์ผ€์ด์Šค

  • ๋ฐ์ดํ„ฐ ์–‘์ด ๋งŽ์€ ํ…Œ์ด๋ธ”
  • ์—…๋ฐ์ดํŠธ๋ณด๋‹ค ์กฐํšŒ๊ฐ€ ์žฆ์€ ํ…Œ์ด๋ธ”
  • ์กฐ๊ฑด๋ฌธ์ด๋‚˜ ์ •๋ ฌ์ด ์žฆ์€ ํ…Œ์ด๋ธ”

 

 

Index ์ž๋ฃŒ๊ตฌ์กฐ


1. Hash ์ธ๋ฑ์Šค ์•Œ๊ณ ๋ฆฌ์ฆ˜ | O(1)

ํ•ด์‹œ ๊ฐ’์„ ๊ณ„์‚ฐํ•ด์„œ ์ธ๋ฑ์‹ฑํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๋งค์šฐ ๋น ๋ฅธ ๊ฒ€์ƒ‰(O(1))์„ ์ง€์›ํ•œ๋‹ค. 

์ด๋Š” ๋“ฑํ˜ธ ์—ฐ์‚ฐ(=)์—๋Š” ์ ์ ˆํ•˜๋‚˜, ๊ฐ’์„ ๋ณ€ํ˜„ํ•ด์„œ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ถ€๋“ฑํ˜ธ ์—ฐ์‚ฐ(>, <)๊ฐ’์˜ ์ผ๋ถ€๋ฅผ ๊ฒ€์ƒ‰(like ‘A*’)์— ๋ถ€์ ์ ˆํ•˜๋‹ค. 

 

 

2. B+-Tree ์ธ๋ฑ์Šค ์•Œ๊ณ ๋ฆฌ์ฆ˜ | O(logN)

์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์ธ๋ฑ์Šค ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ๊ฐ’์„ ๋ณ€ํ˜•ํ•˜์ง€ ์•Š๊ณ , ์›๋ž˜ ๊ฐ’์„ ์ด์šฉํ•œ๋‹ค.

 

๐Ÿ‘‰ B-Tree

Binary Search Tree์™€ ์œ ์‚ฌํ•˜๋‹ค. ๋‹ค๋ฅธ ์ ์€ ์ž์‹ ๋…ธ๋“œ๋ฅผ 2๊ฐœ ์ด์ƒ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๊ณ , ๊ท ํ˜•ํŠธ๋ฆฌ๋‹ค. ๋”ฐ๋ผ์„œ ๋น„๊ท ํ˜• ํŠธ๋ฆฌ๊ฐ€ ๋  ๋•Œ ๊ท ํ˜•์„ ๋งž์ถœ ํ•„์š”๊ฐ€ ์žˆ๊ณ , ์ถ”๊ฐ€์ ์ธ ์—ฐ์‚ฐ์ด ํ•„์š”ํ•˜๋‹ค. 

์ด๋Š” Root Node / Branch Node / Leaf Node๋กœ ๋‚˜๋‰œ๋‹ค.

B-Tree ์˜ˆ์‹œ

 

๐Ÿ‘‰ B+ Tree

B-Tree์˜ ํ™•์žฅ ๊ฐœ๋…์ด๋‹ค. ์˜ค์ง ๋ฆฌํ”„ ๋…ธ๋“œ๋งŒ ์ธ๋ฑ์Šค-๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , Linked List๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค. 

์ด๋Š” ํ•œ ๋…ธ๋“œ์— ๋งŽ์€ key๋ฅผ ๋‹ด์„ ์ˆ˜ ์žˆ์–ด ํŠธ๋ฆฌ์˜ ๋†’์ด๊ฐ€ ๋‚ฎ์•„์ง„๋‹ค. 

 

 

 

์ฐธ๊ณ 
https://zorba91.tistory.com/293
https://mangkyu.tistory.com/96