๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ‡ฉ๐Ÿ‡ฆ๐Ÿ‡น๐Ÿ‡ฆ๐Ÿ‡ง๐Ÿ‡ฆ๐Ÿ‡ธ๐Ÿ‡ช

SQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(DB) B+ tree ์ธ๋ฑ์Šค, ๋ณตํ•ฉ ์ธ๋ฑ์Šค

B+ tree ์ธ๋ฑ์Šค

- ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ์ธ๋ฑ์Šค ๊ตฌ์กฐ

 

์ฐจ์ˆ˜๊ฐ€ ๐‘› ์ธ B + tree

- ์ฐจ์ˆ˜ : ํ•œ ๋…ธ๋“œ(node)์—์„œ ํ•˜์œ„ ์ž์‹ ๋…ธ๋“œ(child node)๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ฃผ์†Œ์˜ ๊ฐœ์ˆ˜

- ์ค‘๊ฐ„ ๋…ธ๋“œ ๊ตฌ์กฐ

โ–ช ๐‘ƒ1 ~ ๐‘ƒ๐‘› : ์ž์‹ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ

โ–ช ๐พ๐‘’๐‘ฆ1 ~ ๐พ๐‘’๐‘ฆ๐‘›−1 : ๊ฒ€์ƒ‰ ํ‚ค (๐พ๐‘’๐‘ฆ1 < ๐พ๐‘’๐‘ฆ2 < ... < ๐พ๐‘’๐‘ฆ๐‘›−1)

โ–ช ๐‘ƒ๐‘–+1 ์ด ๊ฐ€๋ฆฌํ‚ค๋Š” ํ•˜์œ„ ๋…ธ๋“œ์˜ ๋ชจ๋“  ๊ฒ€์ƒ‰ ํ‚ค๋Š” ๐พ๐‘’๐‘ฆ๐‘– ๋ณด๋‹ค ํฌ๊ณ  ๐พ๐‘’๐‘ฆ๐‘–+1 ๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์Œ

 

B+ tree ํŠน์ง•

º ๋‹จ๋ง ๋…ธ๋“œ์— ๋ ˆ์ฝ”๋“œ๋“ค์˜ ์ฃผ์†Œ ์ €์žฅ

º ๋ฃจํŠธ ๋…ธ๋“œ์—์„œ ๋‹จ๋ง ๋…ธ๋“œ๊นŒ์ง€์˜ ๋ชจ๋“  ๊ฒฝ๋กœ์˜ ๊ธธ์ด๋Š” ๊ฐ™์Œ

º ๋ฃจํŠธ ๋…ธ๋“œ๋Š” ์ตœ์†Œ 2๊ฐœ, ์ตœ๋Œ€ n ๊ฐœ์˜ ์ž์‹ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง

º ๋ฃจํŠธ ๋…ธ๋“œ์™€ ๋‹จ๋ง ๋…ธ๋“œ๋ฅผ ์ œ์™ธํ•œ ์ค‘๊ฐ„ ๋…ธ๋“œ๋“ค์€ ์ตœ์†Œ [n / 2], ์ตœ๋Œ€ n๊ฐœ์˜ ์ž์‹ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง

 

B+ tree๋ฅผ ์ด์šฉํ•œ ๊ฒ€์ƒ‰ ๋ฐฉ๋ฒ•

- ๊ฒ€์ƒ‰ ํ‚ค ๊ฐ’์ด ์ฃผ์–ด์งˆ ๋•Œ, ๋ฃจํŠธ ๋…ธ๋“œ์—์„œ๋ถ€ํ„ฐ ๊ทธ ํ‚ค ๊ฐ’์„ ํฌํ•จํ•˜๋Š” ์ฒซ ๋‹จ๋ง ๋…ธ๋“œ๊นŒ์ง€ ํ•˜๋‚˜์˜ ๊ฒฝ๋กœ๊ฐ€ ์กด์žฌํ•˜๊ณ , ์ธ๋ฑ์Šค ๋…ธ๋“œ์— ํฌํ•จ๋œ ํ‚ค ๊ฐ’์„ ๋น„๊ตํ•˜๋ฉด์„œ ๊ทธ ๊ฒฝ๋กœ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Œ

- ๋‹จ๋ง ๋…ธ๋“œ์— ๋„๋‹ฌํ•˜๋ฉด ๊ฒ€์ƒ‰ ํ‚ค๋ฅผ ํฌํ•จํ•œ ๋ ˆ์ฝ”๋“œ๋“ค์— ๋Œ€ํ•œ ์ฃผ์†Œ๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ์Œ → ํ…Œ์ด๋ธ” ๋‚ด์˜ ๋ ˆ์ฝ”๋“œ ์ ‘๊ทผ

 

๊ฒ€์ƒ‰ ์„ฑ๋Šฅ

์˜ˆ) department ํ…Œ์ด๋ธ”์—์„œ 10000๊ฐœ์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ๊ฐ–๊ณ , ์ด ์ค‘์—์„œ dept_name ๊ฐ’์ด '์ปดํ“จํ„ฐ๊ณตํ•™๊ณผ'์ธ ๋ ˆ์ฝ”๋“œ๋ฅผ ๊ฒ€์ƒ‰ํ•  ๋•Œ ์ธ๋ฑ์Šค๊ฐ€ ์—†๋‹ค๋ฉด ์ตœ์•…์˜ ๊ฒฝ์šฐ 10000๊ฐœ์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ๋ชจ๋‘ ๊ฒ€์ƒ‰ํ•ด์•ผํ•จ , dept_name ํ•„๋“œ์— ์ฐจ์ˆ˜๊ฐ€ 10์ธ B+ tree ์ธ๋ฑ์Šค๊ฐ€ ์žˆ๋‹ค๋ฉด!

 

  • B+ tree์˜ ๋†’์ด = [log10 10000] = 4
  • ์ฐจ์ˆ˜๊ฐ€ 10, ๊ฒ€์ƒ‰ ํ‚ค ๊ฐ’์˜ ์ˆ˜๊ฐ€ ์ตœ๋Œ€ 10000๊ฐœ์ด๋ฏ€๋กœ, B+ tree์˜ ๋†’์ด๋Š” ์ตœ๋Œ€ 4๋ฅผ ๋„˜์ง€ ์•Š๋Š”๋‹ค
  • ์ตœ๋Œ€ 4๊ฐœ์˜ ๋…ธ๋“œ๋งŒ ์ฝ์œผ๋ฉฐ ์›ํ•˜๋Š” ๋ ˆ์ฝ”๋“œ๋“ค์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค

 

๋ณตํ•ฉ ์ธ๋ฑ์Šค

- ๋‘ ๊ฐœ ์ด์ƒ์˜ ํ•„๋“œ๋“ค์— ๋Œ€ํ•ด ์ •์˜๋˜๋Š” ์ธ๋ฑ์Šค

- ์ธ๋ฑ์Šค ์—”ํŠธ๋ฆฌ๋“ค์€ ๊ฒ€์ƒ‰ํ‚ค ๊ฐ’์˜ ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌ๋จ

- ํšจ์œจ์ ์ธ ๊ฒ€์ƒ‰์„ ์œ„ํ•ด B+ tree ๊ตฌ์„ฑ ๊ฐ€๋Šฅ

 

์—”ํŠธ๋ฆฌ ์ •๋ ฌ ๋ฐฉ๋ฒ•

- ๊ฒ€์ƒ‰ ํ‚ค ๊ฐ’์ด ์ˆซ์ž์ธ ๊ฒฝ์šฐ ํฌ๊ธฐ๋กœ ์ •๋ ฌ ๊ฐ€๋Šฅ

- ๊ฒ€์ƒ‰ ํ‚ค ๊ฐ’์ด ๋ฌธ์ž์—ด์ธ ๊ฒฝ์šฐ์—๋Š” ์‚ฌ์ „์‹ ์ˆœ์„œ์— ๋”ฐ๋ผ ์ •๋ ฌ

- ๋ฌธ์ž์—ด, ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ์—๋Š” ์—”ํŠธ๋ฆฌ๋“ค ๊ฐ„์˜ ๋Œ€์†Œ ๊ด€๊ณ„ ์ •์˜ ํ•„์š”

 

๋ณตํ•ฉ ์ธ๋ฑ์Šค์˜ ํšจ๊ณผ

โœ” ๋ณตํ•ฉ ์ธ๋ฑ์Šค๊ฐ€ ์ •์˜๋œ ํ•„๋“œ๋“ค๋งŒ์„ ์ด์šฉํ•˜๋Š” ์งˆ์˜๋Š” ํ…Œ์ด๋ธ” ์กฐํšŒ ์—†์ด ๋ณตํ•ฉ ์ธ๋ฑ์Šค ์กฐํšŒ ๋งŒ์œผ๋กœ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ

 

์ฃผ์˜์‚ฌํ•ญ

- ๊ด€๋ จ ํ•„๋“œ์˜ ์ˆœ์„œ์— ๋”ฐ๋ผ ์ธ๋ฑ์Šค์˜ ํšจ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์ง

 

์˜ˆ) (stu_id, class_id) ํ•„๋“œ ์ˆœ์„œ์— ํšจ๊ณผ์ ์ธ ์งˆ์˜

select *
from takes
where stu_id = ‘1292001’ and class_id > ‘C101-01'

 

์˜ˆ) (class_id, stu_id) ํ•„๋“œ ์ˆœ์„œ์— ํšจ๊ณผ์ ์ธ ์งˆ์˜

select *
from takes
where stu_id > ‘1292001’ and class_id = ‘C101-01’