CS_DB_3 ๐ŸŒŸ๐ŸŒŸ๐Ÿšจ

์ด์ •๋นˆยท2023๋…„ 11์›” 23์ผ
0

CS์Šคํ„ฐ๋””

๋ชฉ๋ก ๋ณด๊ธฐ
3/10

๋””์Šคํฌ ์ฝ๊ธฐ ๋ฐฉ์‹

โœ… Sequential I/O & Random I/O

๋ฉด์ ‘์„ ์œ„ํ•œ ๋‹ต!

๐Ÿ“Œ ๋žœ๋ค I/O์™€ ์ˆœ์ฐจ I/O๋Š” ์ €์žฅ ์žฅ์น˜์˜ ๊ด€์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ถˆ์—ฐ์†์ ์œผ๋กœ ์žˆ์–ด ๋””์Šคํฌ ํ—ค๋”๋ฅผ ์ด๋™ ์‹œํ‚ค๊ณ  ๋‹ค์Œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด ์˜ค๋Š” ๊ฒƒ์„ ๋žœ๋ค I/O๋ผ๊ณ  ํ•˜๊ณ , ๋ฐ์ดํ„ฐ๊ฐ€ ์—ฐ์†์ ์œผ๋กœ ์žˆ์–ด ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฝ๊ธฐ๋งŒ ํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์ˆœ์ฐจ I/O๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋‘ I/O๋ฅผ ๋น„๊ตํ–ˆ์„ ๋•Œ ์ˆœ์ฐจ I/O๊ฐ€ ์†๋„๊ฐ€ ๋” ๋นจ๋ผ ์ด์ƒ์ ์œผ๋กœ๋Š” ๋žœ๋ค I/O๋ฅผ ์ˆœ์ฐจ I/O๋กœ ๋ฐ”๊พธ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ฟผ๋ฆฌ๋ฅผ ํŠœ๋‹ํ•ด์•ผ ํ•˜์ง€๋งŒ ๊ทธ๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์ด ๋งŽ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ฟผ๋ฆฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ ๊ผญ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ์ฝ๋„๋ก ์ฟผ๋ฆฌ๋ฅผ ๊ฐœ์„ ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœํ•˜๊ณ  ๊ทธ๊ฒƒ์ด ๋˜ํ•œ ๋žœ๋ค I/O๋ฅผ ์ค„์ด๋Š” ๊ฒƒ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“Œ The way to convert Random to Sequential I/O

  1. ํŒŒ์ผ ํ• ๋‹น ๋ฐ ์ •๋ ฌ : ํŒŒ์ผ์„ ์ƒ์„ฑํ•  ๋•Œ ํŒŒ์ผ ์‹œ์Šคํ…œ์ด ์ˆœ์ฐจ I/O๋ฅผ ์ง€์›ํ•˜๋Š” ๋ธ”๋ก ํฌ๊ธฐ๋กœ ํŒŒ์ผ์„ ํ• ๋‹นํ•˜๊ณ , ํŒŒ์ผ์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ •๋ ฌํ•˜์—ฌ ์ˆœ์ฐจ์ ์ธ ์ ‘๊ทผ์„ ์ด‰์ง„ํ•œ๋‹ค.
  2. ํŒŒ์ผ ์‹œ์Šคํ…œ ์ตœ์ ํ™” : ์ผ๋ถ€ ํŒŒ์ผ ์‹œ์Šคํ…œ์€ ์ˆœ์ฐจ I/O๋ฅผ ๋” ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์ ํ™”๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ์ƒํ™ฉ์—์„œ ๋žœ๋ค I/O์˜ ๋ถ€๋‹ด์„ ๊ฐ์†Œ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ๋ฒ„ํผ๋ง & ์บ์‹ฑ : ์‹œ์Šคํ…œ์ด ๋žœ๋ค I/O๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ์ด๋ฅผ ์บ์‹œ์— ์ €์žฅํ•˜์—ฌ ๋‹ค์Œ์— ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ๋•Œ ์ˆœ์ฐจ์ ์œผ๋กœ ์•ก์„ธ์Šคํ•˜๋„๋ก ํ•œ๋‹ค.
  4. ํŒŒ์ผ ์ ‘๊ทผ ํŒจํ„ด ์ตœ์ ํ™” : ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ํŒŒ์ผ์— ์ ‘๊ทผํ•˜๋Š” ํŒจํ„ด์„ ์ตœ์ ํ™”ํ•œ๋‹ค.
  5. I/O ์Šค์ผ€์ฅด๋ง : I/O Scheduler๋ฅผ ์กฐ์ •ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๊ฐ€ ์—ฐ์†์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๊ฒŒ ๋” ์ด‰์ง„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“Œ ์ถ”๊ฐ€ ์„ค๋ช…
1. ๋งŒ์•ฝ์— ๋Œ€์šฉ๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ๊ฒฝ์šฐ ์ˆœ์ฐจ I/O๊ฐ€ ๋น ๋ฅด๊ธดํ•˜์ง€๋งŒ ๋™๊ธฐํ™”๋ฅผ ์—ฌ๋Ÿฌ๋ฒˆ ํ•ด์•ผํ•˜๋Š” ์ƒํ™ฉ์ด ์˜จ๋‹ค๋ฉด ์ด ๋˜ํ•œ ๋น„ํšจ์œจ์ ์œผ๋กœ ์ด๋ค„ ์งˆ ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด๋•Œ RAID ์ปจํŠธ๋กค๋Ÿฌ์˜ ์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋™๊ธฐํ™” ์ž‘์—…์„ ์ค„์—ฌ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.


๊ณต๋ถ€ํ•œ ๋‚ด์šฉ

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

๐Ÿ’ก ์งง๊ฒŒ ๋งํ•  ์ˆ˜ ์žˆ๋Š” SSD์™€ HDD์˜ ์ฐจ์ด
HDD๋Š” ๋ฐ์ดํ„ฐ ์ €์žฅ์šฉ ํ”Œ๋ ˆํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ, SSD๋Š” ์ด๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ํ”Œ๋ž˜์‹œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์žฅ์ฐฉํ•˜๊ณ  ์žˆ๋‹ค.(ํ”Œ๋ž˜์‰ฌ ๋ฉ”๋ชจ๋ฆฌ๋Š” ์ „์›์ด ๊ณต๊ธ‰๋˜์ง€ ์•Š์•„๋„ ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œ ๋˜์ง€ ์•Š๋Š”๋‹ค.) ๊ทธ๋ฆฌ๊ณ  ์ด๋Ÿฌํ•œ ํ”Œ๋ž˜์‰ฌ ๋ฉ”๋ชจ๋ฆฌ๋Š” D-RAM๋ณด๋‹ค๋Š” ๋Š๋ฆฌ์ง€๋งŒ, HDD๋ณด๋‹ค๋Š” ํ›จ์”ฌ ๋น ๋ฅธ ์†๋„๋ฅผ ๋ณด์ธ๋‹ค. ๊ทธ๋ž˜์„œ DBMS์šฉ์œผ๋กœ SSD๋ฅผ ๋งŽ์ด ์ฑ„ํƒํ•˜๊ณ  ์žˆ๋‹ค.

  • RANDOM I/O
    ํ•˜๋“œ ๋””์Šคํฌ ๋“œ๋ผ์ด๋ธŒ ํ”Œ๋ž˜ํ„ฐ(์›ํŒ)๋ฅผ ๋Œ๋ ค์„œ ์ฝ์–ด์•ผ ํ•  ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋œ ์œ„์น˜๋กœ ๋””์Šคํฌ ํ—ค๋”๋ฅผ ์ด๋™์‹œํ‚จ ๋‹ค์Œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๋Š”๋ฐ, ์ด๋Ÿฌํ•œ ๊ณผ์ •์€ SEQUENTAIL I/O ๋˜ํ•œ ๊ฐ™๋‹ค. ๊ทธ๋Ÿผ์—๋„ ์ด ๋‘˜์„ ๋ถ„๋ฅ˜ํ•˜๋Š” ๊ธฐ์ค€์€ ๋””์Šคํฌ ํ—ค๋”์˜ ์œ„์น˜์˜ ์ด๋™ ์—†์ด ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ๋ฒˆ์— ๊ธฐ๋กํ•˜๋Š๋ƒ์— ๋”ฐ๋ผ ๊ฒฐ์ •๋œ๋‹ค. DBMS์˜ ์ด๋Ÿฌํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ฐ๋Š” ์ž‘์—…์€ MySQL ์„œ๋ฒ„์—๋Š” ๊ทธ๋ฃน ์ปค๋ฐ‹์ด๋‚˜ ๋ฐ”์ด๋„ˆ๋ฆฌ ๊ณ ๋ฅด ๋ฒ„ํผ ๋˜๋Š” InnoDB ๋กœ๊ทธ ๋ฒ„ํผ ๋“ฑ์˜ ๊ธฐ๋Šฅ์ด ๋‚ด์žฅ๋ผ ์žˆ๋‹ค.

๐Ÿ”Ž InnoDB ๋กœ๊ทธ ๋ฒ„ํผ๋ž€?

MySQL์—์„œ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์ž‘์—… ์ค‘์— ๋ฐœ์ƒํ•˜๋Š” ํŠธ๋žœ์žญ์…˜ ๋กœ๊ทธ๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„์ด๋‹ค. ์ด ๋กœ๊ทธ๋Š” ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์ž‘์—…์ด ๋ฐœ์ƒํ•  ๋•Œ๋งˆ๋‹ค ๊ธฐ๋ก๋˜๋ฉฐ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ผ๊ด€์„ฑ๊ณผ ๋‚ด๊ตฌ์„ฑ์„ ๋ณด์žฅํ•˜๋Š”๋ฐ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•œ๋‹ค.
1. ํŠธ๋žœ์žญ์…˜ ๋กœ๊ทธ ๊ธฐ๋ก (INSERT , UPDATE, DELETE)
2. ์žฌ์‹คํ–‰ ๋ฐ ๋กค๋ฐฑ ์ง€์› : ํŠธ๋žœ์žญ์…˜ ๋„์ค‘์— ์‹œ์Šคํ…œ์ด ์ค‘๋‹จ๋˜๋Š” ๊ฒฝ์šฐ ๋ฒ„ํผ์— ์ €์žฅ๋œ ํŠธ๋žœ์žญ์…˜์˜ ๋กœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ DB๋ฅผ ๋ณต๊ตฌ ํ•  ์ˆ˜ ์žˆ๋‹ค.
3. ์“ฐ๊ธฐ ์„ฑ๋Šฅ ํ–ฅ์ƒ : InnoDB ๋กœ๊ทธ ๋ฒ„ํผ๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ์œ„์น˜ํ•˜๋ฏ€๋กœ ๋””์Šคํฌ I/O๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค. ๋ณ€๊ฒฝ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋จผ์ € ๋กœ๊ทธ ๋ฒ„ํผ์— ๊ธฐ๋ก๋˜๊ณ  ๋‚˜์ค‘์— ์‹ค์ œ ๋ฐ˜์˜์ด ๋˜๊ธฐ์— ํšจ์œจ์ ์ธ ์“ฐ๊ธฐ ์ž‘์—…์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
4. InnoDB ๋กœ๊ทธ ๋ฒ„ํผ๋ฅผ ํ†ตํ•˜์—ฌ ์„ฑ๋Šฅ ํŠœ๋‹์„ ํ•  ์ˆ˜ ์žˆ์œผ๋‚˜, ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ ์ •ํ•˜๊ฒŒ ์กฐ์ ˆํ•˜๋ฉฐ ์‚ฌ์šฉ์„ ํ•ด์•ผํ•œ๋‹ค.

์œ„ ์‚ฌ์ง„์—์„œ ํ™•์ธ์„ ํ•ด๋ณด๋ฉด ์ˆœ์ฐจ I/O๋Š” ๋žœ๋ค I/O ๋ณด๋‹ค 3๋ฐฐ๋” ๋น ๋ฅธ ์ž‘์—…์„ ํ•œ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ์—ฌ๋Ÿฌ ๋ฒˆ ์“ฐ๊ธฐ ๋˜๋Š” ์ฝ๊ธฐ ์š”์ฒญ์„ ํ•˜๋Š” ๋žœ๋ค I/O๊ฐ€ ํ›จ์”ฌ ๋ถ€ํ•˜๊ฐ€ ํฌ๋‹ค. ์ด๋Ÿฌํ•œ ์ ์—์„œ ๋ณผ ๋•Œ SSD์—์„œ๋Š” ์ ์šฉ์ด ์•ˆ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ „ํ˜€ ์•„๋‹ˆ๋‹ค.

๐Ÿ’ก SSD์—์„œ์˜ Sequential & Random I/O๋„ Random I/O๋Š” Sequential I/O์˜ ์Šค๋ฃจํ’‹(ํ†ต์‹ ์—์„œ ๋„คํŠธ์›Œํฌ ์ƒ์˜ ์–ด๋–ค ๋…ธ๋“œ๋‚˜ ํ„ฐ๋ฏธ๋„๋กœ๋ถ€ํ„ฐ ๋˜ ๋‹ค๋ฅธ ํ„ฐ๋ฏธ๋„๋กœ ์ „๋‹ฌ๋˜๋Š” ๋‹จ์œ„ ์‹œ๊ฐ„๋‹น ๋””์ง€ํ„ธ ๋ฐ์ดํ„ฐ ์ „์†ก์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ์–‘, ์ „์ฒด ์ฒ˜๋ฆฌ์œจ)์ด ๋–จ์–ด์ง„๋‹ค. ๊ทธ๋ž˜์„œ SSD์—์„œ๋„ ๋‘˜์˜ ์„ฑ๋Šฅ ๋น„๊ต๋ฅผ ๊ตฌ๋ถ„ํ•ด์„œ ๋ช…์‹œํ•œ๋‹ค.


โœ… Index๋ž€? & ์ธ๋ฑ์Šค์˜ ๋™์ž‘ ๋ฐฉ์‹ & How to set up Index? & ํ…Œ์ด๋ธ”์— ์ธ๋ฑ์Šค๋ฅผ ๋งŽ์ด ์„ค์ •ํ•˜๋ฉด?

๋ฉด์ ‘์„ ์œ„ํ•œ ๋‹ต

๐Ÿ“Œ INDEX๋Š” ์ฑ…์˜ ์ฐพ์•„๋ณด๊ธฐ("์ƒ‰์ธ")์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ Spread Sheet์˜ ๋ ˆ์ฝ”๋“œ์˜ ์ฃผ์†Œ์— ๋น„์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ , ์ธ๋ฑ์Šค๋Š” ๋น ๋ฅธ ์กฐํšŒ๋ฅผ ์œ„ํ•ด์„œ ํ•ญ์ƒ ์ •๋ ฌ๋˜์–ด ์žˆ๋‹ค๋Š” ํŠน์ง•์— ์˜ํ•ด DBMS์—์„œ ์ธ๋ฑ์Šค๋Š” ๋ฐ์ดํ„ฐ์˜ ์ €์žฅ ์„ฑ๋Šฅ์„ ํฌ์ƒํ•˜๊ณ  ๋Œ€์‹  ๋ฐ์ดํ„ฐ์˜ ์ฝ๊ธฐ ์†๋„๋ฅผ ๋†’์ด๋Š” ๊ธฐ๋Šฅ์„ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. โžก๏ธ DB์—์„œ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ๊ฒ€์ƒ‰ ์†๋„๋ฅผ ํ–ฅ์ƒ ์‹œ์ผœ์ฃผ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ์ด๋Ÿฌํ•œ ์ธ๋ฑ์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๊ธฐ๋ณธํ‚ค๋ฅผ ์ฐพ๊ณ  ๊ทธ ๊ธฐ๋ณธ ํ‚ค๋ฅผ ์ด์šฉํ•˜์—ฌ ํ•ด๋‹น ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ธ๋ฑ์Šค๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ๋ชจ๋“  ๊ฒƒ์„ ์ €์žฅํ•˜์ง€ ์•Š๊ณ  SELECT / WHERE ์กฐ๊ฑด์ ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ ์›ํ•˜๋Š” Column์— ๋Œ€ํ•˜์—ฌ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค๊ณ  ํ•˜์—ฌ๋„ ํฐ ํ‹€์„ ์ •ํ•˜๊ณ  ์ƒ์„ฑํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฐ์ดํ„ฐ ์ €์žฅ ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง€๊ณ  ํฌ๊ธฐ๊ฐ€ ๋น„๋Œ€ํ•ด์ ธ ์—ญํšจ๊ณผ๊ฐ€ ๋‚  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  C,R,U,D๊ฐ€ ์žฆ์€ ์ปฌ๋Ÿผ์— ๋Œ€ํ•ด์„œ๋Š” ์ธ๋ฑ์Šค ๋˜ํ•œ ์ˆ˜์ •๋˜์–ด์•ผ ํ•˜๊ณ  ์ธ๋ฑ์Šค๋Š” ์ œ๊ฑฐ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๋น„ํ™œ์„ฑํ™” ์ƒํƒœ๋กœ ๋‚จ๊ธฐ ๋•Œ๋ฌธ์— ์ธ๋ฑ์Šค๊ฐ€ ๊ณผ๋„ํ•˜๊ฒŒ ์ปค์งˆ ์œ„ํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š” ์†๋„๋ฅผ ๋†’์ด๊ธฐ ์œ„ํ•ด์„œ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ์ค‘๋ณต ๊ฐ’์˜ ํ—ˆ์šฉ ์—ฌ๋ถ€ ๋“ฑ์— ๋”ฐ๋ผ ์‚ฌ์šฉ์ž๊ฐ€ ์ž„์˜๋กœ ์—ฌ๋Ÿฌ ๋ถ„๋ฅ˜๋กœ ๋‚˜๋ˆˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒฝ์šฐ ๋Œ€ํ‘œ์ ์œผ๋กœ B-Tree Index, Hash Index, Fractal-Tree Index, Merge-Tree Index๋ฅผ ๋Œˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ”Ž Index ์ƒ์„ฑ ๋ฐฉ๋ฒ•

CREATE INDEX idx_age ON users(age);

์œ„์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ •๋ ฌ์ด ๋˜์–ด์žˆ๋Š” ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์•Œ ์ˆ˜ ์žˆ๋Š” ์ธ๋ฑ์Šค์˜ ํŠน์ง•์€, SELECT-FROM-WHERE ์ ˆ ์ค‘ WHERE ์ ˆ์—์„œ ์‚ฌ์šฉํ•  ์ปฌ๋Ÿผ์— ๋Œ€ํ•œ ํšจ์œจํ™”๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, WHERE์ ˆ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ธ๋ฑ์Šค๋ฅผ ๊ฐ€์ง„ ์ปฌ๋Ÿผ์„ ์กฐํšŒํ•˜๋Š” ๊ฒƒ์€ ์„ฑ๋Šฅ ํ–ฅ์ƒ์— ์•„๋ฌด๋Ÿฐ ์˜ํ–ฅ์„ ์ฃผ์ง€ ๋ชปํ•œ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.

โœ… ์ธ๋ฑ์Šค๋ฅผ ๋งŽ์ด ์„ค์ •ํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

WHERE์ ˆ์„ ์ธ๋ฑ์Šค๊ฐ€ ์žˆ๋Š” ์นผ๋Ÿผ์— ์กฐํšŒ๋ฅผ ํ•˜์—ฌ ํšจ์œจ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜๋ ค๊ณ  ํ•ด๋„ ์ธ๋ฑ์Šค๋Š” ๋‹จ์ผ ์ธ๋ฑ์Šค๋งŒ์ด ์•„๋‹Œ ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ปฌ๋Ÿผ์„ ๋ฌถ์–ด์„œ ๋ณตํ•ฉ ์ธ๋ฑ์Šค๋ฅผ ํ˜•์„ฑํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ‘์˜ ์ข‹์€ ์‚ฌ์šฉ ์˜ˆ์‹œ์— ๋งž๊ฒŒ ์ธ๋ฑ์Šค๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค! ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด DML(๋ฐ์ดํ„ฐ ์กฐ์ž‘์–ด, SELECT,INSERT, DELETE, UPDATE )์˜ ํšจ์œจ์„ฑ์„ ์˜คํžˆ๋ ค ์ €ํ•˜์‹œํ‚ค๋Š” ์›์ธ์ด ๋  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ”Ž Index ์‚ฌ์šฉ์˜ ์ข‹์€ ์˜ˆ์‹œ

  • ๊ทœ๋ชจ๊ฐ€ ํฐ ํ…Œ์ด๋ธ”
  • C,R,U,D ์˜ ์ž‘์—…์ด ์ž์ฃผ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ์ปฌ๋Ÿผ (ํ™œ์šฉ๋„)
  • WHERE์ด๋‚˜ ORDER BY, JOIN ๋“ฑ์ด ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์ปฌ๋Ÿผ (์„ ํƒ๋„)
  • ๋ฐ์ดํ„ฐ์˜ ์ค‘๋ณต๋„๊ฐ€ ๋‚ฎ์€ ์ปฌ๋Ÿผ(์ค‘๋ณต๋„)
  • ์นด๋””๋„๋ฆฌํ‹ฐ๊ฐ€ ๋†’์€ ์ปฌ๋Ÿผ(์นด๋””๋„๋ฆฌํ‹ฐ๋ž€, ์ธ๋ฑ์Šค์— ํ•ด๋‹นํ•˜๋Š” ์ปฌ๋Ÿผ ๊ธฐ์ค€์œผ๋กœ ํ…Œ์ด๋ธ”์—์„œ ์œ ์ผํ•œ ๋ ˆ์ฝ”๋“œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์ฆ‰, ์ปฌ๋Ÿผ์—์„œ์˜ ์ค‘๋ณต ์ˆ˜์น˜๋ฅผ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค.)

๐Ÿ”† More comphrehension on Index

๐Ÿ”† Structure of Index

์ธ๋ฑ์Šค๋ฅผ ๋” ์ž์„ธํ•˜๊ฒŒ ์•Œ๋ ค๋ฉด, Hash ํ…Œ์ด๋ธ”๊ณผ B+ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•ด์„œ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ”† What is a Page?

ํŽ˜์ด์ง€๋ž€ ๋””์Šคํฌ์™€ ๋ฉ”๋ชจ๋ฆฌ(๋ฒ„ํผํ’€)์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ฐ๋Š” ์ตœ์†Œ ์ž‘์—… ๋‹จ์œ„์ด๋‹ค. ์ธ๋ฑ์Šค๋ฅผ ํฌํ•จํ•ด ๊ธฐ๋ณธํ‚ค(ํด๋Ÿฌ์Šคํ„ฐ ์ธ๋ฑ์Šค)์™€ ํ…Œ์ด๋ธ” ๋“ฑ์€ ๋ชจ๋‘ ํŽ˜์ด์ง€ ๋‹จ์œ„๋กœ ๊ด€๋ฆฌ ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋ฐ์ดํ„ฐ๋ฅผ ๋…ผ๋ฆฌ์ ์œผ๋กœ ํ˜น์€ ๋ฌผ๋ฆฌ์ ์„ ๊ตฌ์„ฑํ•˜๋Š” ์ตœ์†Œ ์ž‘์—… ๋‹จ์œ„๋ผ๊ณ  ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ’ก Clustered-indexing
ํด๋Ÿฌ์Šคํ„ฐ ์ธ๋ฑ์Šค๋Š” ์ธ๋ฑ์‹ฑ์˜ ๊ธฐ๋ณธ ํƒ€์ž…์„ ํ…Œ์ด๋ธ”์˜ ๊ฒฐ์ •์ž์™€ ๊ธฐ๋ณธํ‚ค์— ์˜ํ•ด์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ •๋ ฌ๋˜๋Š” ์ธ๋ฑ์‹ฑ ํƒ€์ž…์ž…๋‹ˆ๋‹ค.

๐Ÿ”† Hash Table

Key์™€ Value๋ฅผ ํ•œ ์Œ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ์ธ๋ฑ์Šค ๊ฐ’์ด ๋ฐ์ดํ„ฐ ๊ฐ’์— ๋Œ€ํ•œ ํ‚ค๋กœ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งค์šฐ ๋น ๋ฅธ ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ํ•ด์‹œ ํ…Œ์ด๋ธ”์€ Key-Value ์Œ์„ ์ €์žฅํ•˜์ง€๋งŒ Key๋Š” ํ•ด์‹ฑ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.(์ค‘๋ณต์ด ์—†์ด ์ƒ์„ฑํ•˜์—ฌใ…ก ๊ฐ ํ‚ค๋ฅผ ๊ณ ์œ ํ•œ ํ•ด์‹œ ๊ฐ’์œผ๋กœ ๋งคํ•‘ํ•˜์—ฌ ๋น ๋ฅด๊ฒŒ ์ฐพ๊ธฐ ์œ„ํ•จ์ด๋‹ค.)
์—…๋กœ๋“œ์ค‘..
ํ•ด์‹ฑ์˜ ๊ฐœ๋…์€ ๋ฒ„ํ‚ท ๋ฐฐ์—ด์— ํ‚ค-๊ฐ’์˜ ์Œ์„ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(1)์ด๋ฉฐ ๋งค์šฐ ๋น ๋ฅธ ๊ฒ€์ƒ‰์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ํ•ด์‹œ๊ฐ€ ๋“ฑํ˜ธ ์—ฐ์‚ฐ(=)์—๋งŒ ํŠนํ™”๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, DB์—์„œ๋Š” ๋งŽ์ด ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.


โœ… ์ปค๋ฒ„๋ง ์ธ๋ฑ์Šค & ๋‹ค์ค‘ ์ปฌ๋Ÿผ ์ธ๋ฑ์Šค

์ปค๋ฒ„๋ง ์ธ๋ฑ์Šค๋ผ๋Š” ๊ฒƒ์€ ์ฟผ๋ฆฌ๋ฅผ ์ถฉ์กฑ์‹œํ‚ค๋Š”๋ฐ ์žˆ์–ด ํ•„์š”ํ•œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š” ์ธ๋ฑ์Šค๋ฅผ ๋งํ•˜๊ณ , ๋‹ค์ค‘ ์ปฌ๋Ÿผ ์ธ๋ฑ์Šค๋Š”


โœ… B-Tree ์ธ๋ฑ์Šค์™€ B+Tree ์ธ๋ฑ์Šค์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋ฉด์ ‘์„ ์œ„ํ•œ ๋‹ต

๐Ÿ“Œ B-Tree ์™€ B+Tree๋Š” ์ธ๋ฑ์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ํŠธ๋ฆฌ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. B+Tree๋Š” B-Tree์˜ ๋ณ€ํ˜•์œผ๋กœ, ๋ฆฌํ”„ ๋…ธ๋“œ์—๋งŒ ๊ฐ’์„ ๋‹ด์•„ ๋†“๊ณ  ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์–ด ๋ฒ”์œ„ ๊ฒ€์ƒ‰์ด๋‚˜ ์ •๋ ฌ๋œ ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜์— ํšจ๊ณผ์ ์ด๋ผ๋Š” ํŠน์ง•์ด ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ“– ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ

๐ŸŒฒ B-Tree

๐Ÿ’ก B-Tree๋Š” DB์˜ ์ธ๋ฑ์‹ฑ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐ€์šด๋ฐ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๊ณ , ๊ฐ€์žฅ ๋จผ์ € ๋„์ž…๋œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ํ•˜์ง€๋งŒ ์•„์ง๋„ ๊ฐ€์žฅ ๋ฒ”์šฉ์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค. B-Tree๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‹ค์–‘ํ•˜๊ฒŒ ๋ณ€ํ˜•๋˜์–ด ์‚ฌ์šฉ๋˜๋Š”๋ฐ ๊ทธ๋ ‡๊ฒŒ InnoDB๋ฅผ ์ด๋ฃจ๋Š” B+Tree ๋“ฑ์ด ํƒ„์ƒํ•˜๊ฒŒ ๋˜์—ˆ๋””.

๐Ÿ’ก B-Tree์˜ ๊ตฌ์กฐ ๋ฐ ํŠน์„ฑ

  • ์ฒซ ์‚ฌ์ง„์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด, B-Tree ๊ตฌ์กฐ๋Š” ๋ชจ๋“  ๋…ธ๋“œ์— ๊ฐ’์„ ๋‹ด๊ณ , ์ตœ์ƒ์œ„์— Root Node๊ฐ€ ์žˆ๊ณ  ๊ทธ ํ•˜์œ„์— ์ž์‹ ๋…ธ๋“œ๊ฐ€ ๋ถ™์–ด ์žˆ์œผ๋ฉฐ ์ตœํ•˜์œ„์—๋Š” Leaf Node๊ฐ€ ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์ค‘๊ฐ„์˜ node๋“ค์€ Branch Node๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
  • ์ธ๋ฑ์Šค๋Š” ๊ฒ€์ƒ‰์˜ ํšจ์œจ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ์ •๋ ฌ๋ผ ์žˆ์ง€๋งŒ, ๋ฐ์ดํ„ฐ ํŒŒ์ผ์˜ ๋ ˆ์ฝ”๋“œ๋Š” ์ •๋ ฌํ•˜์ง€ ์•Š๊ณ  ์ž„์˜๋กœ ์ €์žฅ๋˜์–ด ์žˆ๋‹ค. ์ฆ‰, ๋ฐ์ดํ„ฐ ํŒŒ์ผ์˜ ๋ ˆ์ฝ”๋“œ๋Š” INSERTํ•œ ์ˆœ์„œ๋Œ€๋กœ ์ €์žฅ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. ์ค‘๊ฐ„์— ์–ด๋–ค ๋ ˆ์ฝ”๋“œ๊ฐ€ ์‚ญ์ œ๋˜์–ด ๊ณต๊ฐ„์ด ์ƒ๊ธฐ๋ฉด ๊ทธ ๊ณต๊ฐ„์„ ๊ณ„์† ์žฌํ™œ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์—…๋กœ๋“œ์ค‘..

  • ์œ„ ์‚ฌ์ง„์—์„œ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋“ฏ์ด, ์ธ๋ฑ์Šค๋Š” ํ‚ค ๊ฐ’์— ๋Œ€ํ•œ ์ •๋ณด๋งŒ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‚˜๋จธ์ง€ ์ปฌ๋Ÿผ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ฝ๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฐ์ดํ„ฐ ํŒŒ์ผ์—์„œ ํ•ด๋‹น ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฐพ์•„์•ผ ํ•œ๋‹ค. ๊ทธ๋ฅผ ์œ„ํ•ด ํ…Œ์ด๋ธ”์˜ ๊ธฐ๋ณธํ‚ค๋ฅผ ํ†ตํ•ด์„œ(๋…ผ๋ฆฌ์ ์ธ ์ฃผ์†Œ ํ• ๋‹น) ๋…ธ๋“œ๋ฅผ ํŒŒํ•ด์ณ ๋“ค์–ด๊ฐ€ ๋ฆฌํ”„๋…ธ๋“œ ์•ˆ์˜ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ์ •๋ณด๋ฅผ ์ฐพ๋Š”๋‹ค.

์—…๋กœ๋“œ์ค‘..

  • ์œ„ ์‚ฌ์ง„์—์„œ ๋ณด๋“ฏ์ด ๋ฆฌํ”„ ๋…ธ๋“œ์— ์ธ๋ฑ์Šค ํ‚ค, ๊ธฐ๋ณธํ‚ค์˜ ์Œ์œผ๋กœ ์ €์žฅ๋˜์–ด ์žˆ์Œ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ธ๋ฑ์Šค๋Š” ํ…Œ์ด๋ธ”๊ณผ ๋…๋ฆฝ์ ์ธ ์ €์žฅ ๊ณต๊ฐ„์ด๋ฏ€๋กœ ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋ ค๋ฉด ๋จผ์ € Primary Key๋ฅผ ์ฐพ์•„์•ผ ํ•œ๋‹ค. ๊ธฐ๋ณธํ‚ค๋กœ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฐพ์„ ๋•Œ๋Š” ๊ธฐ๋ณธํ‚ค๊ฐ€ ์–ด๋Š ํŽ˜์ด์ง€์— ์ €์žฅ ๋˜์–ด ์žˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๋žœ๋ค I/O๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ์ดํ›„์—๋Š” ๊ธฐ๋ณธํ‚ค๋ฅผ ๋”ฐ๋ผ ๋ฆฌํ”„๋…ธ๋“œ์— ์‹ค์ œ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฝ์–ด์˜ต๋‹ˆ๋‹ค.

๐Ÿ’ก B-Tree ์ธ๋ฑ์Šค ํ‚ค ์ถ”๊ฐ€ ๋ฐ ์‚ญ์ œ

  • ์ธ๋ฑ์Šค ํ‚ค ์ถ”๊ฐ€
    ๋‚ด๊ฐ€ ์ž…๋ ฅํ•œ ๊ฐ’์ด ์ฆ‰์‹œ ๋ฐ˜์˜๋ ์ง€ ์•ˆ๋ ์ง€๋ฅผ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— B-Tree์— ๊ฐ’์„ ์ €์žฅํ•  ๋•Œ B-Tree์˜ ์ƒ์˜ ์ ์ ˆํ•œ ์œ„์น˜๋ฅผ ๊ฒ€์ƒ‰ํ•ด์•ผ ํ•œ๋‹ค. ๊ทธํ›„ ์ €์žฅํ•  ์œ„์น˜๊ฐ€ ๊ฒฐ์ •๋˜๋ฉด B-Tree์˜ ๋ฆฌํ”„๋…ธ๋“œ์— ๋ ˆ์ฝ”๋“œ์˜ ํ‚ค ๊ฐ’๊ณผ ์ฃผ์†Œ ์ •๋ณด๋ฅผ ์ €์žฅํ•œ๋‹ค. ๋งŒ์•ฝ ์ €์žฅํ•˜๋‹ค๊ฐ€ ๋ฆฌํ”„๋…ธ๋“œ์˜ ๊ณต๊ฐ„์ด ๋‹ค ์ฐจ๊ฒŒ ๋˜๋ฉด ๊ทธ ์ƒ์œ„๋…ธ๋“œ๋กœ ๋„˜์–ด๊ฐ€ ์ •๋ณด๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค. ์ด ๊ณผ์ •์„ ์ €์žฅ์„ ์™„๋ฃŒํ• ๋•Œ ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.
    - ์ด๋Ÿฌํ•œ ์  ๋•Œ๋ฌธ์—, B-Tree์—์„œ ์ธ๋ฑ์Šค ํ‚ค ์ถ”๊ฐ€๋Š” ๋น„์šฉ์ด ๋งŽ์ด ๋“ ๋‹ค๊ณ  ์•Œ๋ ค์ง„๋‹ค.

  • ์ธ๋ฑ์Šค ํ‚ค ์‚ญ์ œ
    ์•„์ฃผ ๊ฐ„๋‹จํ•˜๊ฒŒ B-Tree์˜ ๋ฆฌํ”„ ๋…ธ๋“œ๋ฅผ ์ฐพ์•„์„œ ์‚ญ์ œ ๋งˆํฌ๋งŒ ํ•˜๋ฉด ์ž‘์—…์ด ์™„๋ฃŒ๋œ๋‹ค.์™„์ „ํžˆ ์‚ญ์ œ๋˜๋Š”๊ฒƒ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ณ„์† ๋ฐฉ์น˜ํ•˜๊ฑฐ๋‚˜ ์žฌํ™œ์šฉ ๋  ์ˆ˜ ์žˆ๋‹ค.

  • ์ธ๋ฑ์Šค ํ‚ค ๋ณ€๊ฒฝ
    B-Tree์˜ ํ‚ค ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š”, ์ผ๋‹จ ํ•ด๋‹น ํ‚ค ๊ฐ’์„ ์‚ญ์ œํ•œ ํ›„, ๋‹ค์‹œ ์ƒˆ๋กœ์šด ํ‚ค ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜๋Š” ํ˜•ํƒœ๋กœ ์ฒ˜๋ฆฌ๋œ๋‹ค. ์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝํ•˜๋Š” ๊ณผ์ • ์ค‘ ๋ฐœ์ƒํ•˜๋Š” ์ถ”๊ฐ€์™€ ์‚ญ์ œ๋Š” ์œ„์˜ ๊ณผ์ •๊ณผ ๊ฐ™๋‹ค.

  • ์ธ๋ฑ์Šค ํ‚ค ๊ฒ€์ƒ‰
    ํŠธ๋ฆฌํƒ์ƒ‰ ์ž‘์—…๊ณผ ๋งค์šฐ ์œ ์‚ฌํ•˜๊ฒŒ ์ง„ํ–‰๋œ๋‹ค. ๋ฃจํŠธ ๋…ธ๋“œ๋กœ ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด ๋งค๋ฒˆ n-way ๊ฒฐ์ •์„ ๋‚ด๋ฆฌ๊ฒŒ ๋œ๋‹ค. ์—ฌ๊ธฐ์„œ n์€ ์ž์‹ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๋ฅผ ๋งํ•˜๊ณ  ์ด์— ๋”ฐ๋ผ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(log n) ์— ์ˆ˜ํ–‰๋œ๋‹ค.
    ๊ฒ€์ƒ‰ ์š”์†Œ ์ฝ๊ธฐ โžก๏ธ ๊ฒ€์ƒ‰ ์š”์†Œ๋ฅผ ํŠธ๋ฆฌ์—์„œ ๋ฃจํŠธ ๋…ธ๋“œ์˜ ์ฒซ ๋ฒˆ์งธ ํ‚ค ๊ฐ’๊ณผ ๋น„๊ต โžก๏ธ ๋‘˜ ๋‹ค ์ผ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ ์ฐพ์•˜์Œ์„ ํ‘œ์‹œ ํ›„ ํ•จ์ˆ˜ ์ข…๋ฃŒ โžก๏ธ ์ผ์น˜ ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ๊ฒ€์ƒ‰ ์š”์†Œ๋ฅผ ํ•ด๋‹น ํ‚ค ๊ฐ’๋„๋‹ค ์ž‘๊ฑฐ๋‚˜ ํฐ์ง€ ๋น„๊ต ์—ฐ์‚ฐ์ž๋ฅผ ํ†ตํ•ด ํ™•์ธ โžก๏ธ ํ‚ค ๊ฐ’์ด ์ž‘์€ ๊ฒฝ์šฐ ํ•˜์œ„ ํŠธ๋ฆฌ์—์„œ ๊ฐ™์€ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค. โžก๏ธ ๋งŒ์•ฝ ๊ฒ€์ƒ‰ ์š”์†Œ๊ฐ€ ๋” ํฌ๋ฉด ๋™์ผํ•œ ๋…ธ๋“œ์˜ ๋‹ค์Œ ํ‚ค ๊ฐ’๊ณผ ๋น„๊ตํ•˜๊ณ  ์ •ํ™•ํžˆ ์ผ์น˜ํ•˜๋Š” ํ•ญ๋ชฉ์„ ์ฐพ๊ฑฐ๋‚˜ ๊ฒ€์ƒ‰ ์š”์†Œ๊ฐ€ ๋งˆ์ง€๋ง‰ ํ‚ค ๊ฐ’๊ณผ ๋น„๊ตํ•  ๋•Œ๊นŒ์ง€ ์œ„ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค. โžก๏ธ ๋ฆฌํ”„๋…ธ๋“œ์˜ ๋งˆ์ง€๋ง‰์—๋„ ์ฐพ์„ ์ˆ˜ ์—†์œผ๋ฉด ์ฐพ์„ ์ˆ˜ ์—†์Œ์— ๋Œ€ํ•œ ๋ฉ”์„ธ์ง€๋ฅผ ํ‘œ์‹œํ•˜๊ณ  ์ข…๋ฃŒํ•œ๋‹ค.

โœ… ํŠธ๋ฆฌํƒ์ƒ‰ : Root Node โžก๏ธ Branch Node โžก๏ธ Leaf Node๋กœ ์ด๋™ํ•˜๋ฉฐ ๋น„๊ต ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ


๐ŸŒฒ B+Tree

๐Ÿ’ก B+Tree๋Š” B-Tree์˜ ํ™•์žฅ ๊ฐœ๋…์œผ๋กœ, ๋ธŒ๋žœ์น˜ ๋…ธ๋“œ์— ํ‚ค๊ฐ’๋งŒ ๋‹ด์•„๋‘๊ณ , ๋ฐ์ดํ„ฐ๋Š” ๋‹ด์•„ ๋‘์ง€ ์•Š๋Š”๋‹ค. ์˜ค์ง leaf ๋…ธ๋“œ์—๋งŒ ํ‚ค์™€ ๋ฐธ๋ฅ˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋‚˜๋จธ์ง€ ๋…ธ๋“œ๋“ค์€ ๋ฐ์ดํ„ฐ๋ฅผ ์œ„ํ•œ ์ธ๋ฑ์Šค(Key)๋งŒ์„ ๊ฐ€์ง€๊ณ , leaf node๋ผ๋ฆฌ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋กœ์„œ ์ด์–ด์ ธ ์žˆ๋‹ค. B-Tree์˜ ์žฅ์ ์€ ํ•œ ๋…ธ๋“œ๋‹น ์ž์‹ ๋…ธ๋“œ๊ฐ€ 2๊ฐœ ์ด์ƒ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ์— ๊ฒ€์ƒ‰๋ฉด์—์„œ ๋น ๋ฅด๊ฒŒ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์—ˆ๋Š”๋ฐ B+Tree๋Š” ๋ฆฌํ”„๋…ธ๋“œ๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋” ํ™•๋ณดํ•˜์—ฌ ๋” ๋งŽ์€ ํ‚ค๊ฐ’์„ ์ˆ˜์šฉํ•˜์—ฌ ํŠธ๋ฆฌ์˜ ๋†’์ด๋ฅผ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ’€์Šค์บ” ์‹œ์—๋Š” B-Tree๋ณด๋‹ค ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.

์—…๋กœ๋“œ์ค‘..

Hash ์ธ๋ฑ์Šค์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

โœ… ํด๋Ÿฌ์Šคํ„ฐ๋ง ์ธ๋ฑ์Šค์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋ฌผ

์ธ๋ฑ์Šค ์Šค์บ” ๋ฐฉ์‹์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

์ฟผ๋ฆฌ ์‹คํ–‰ ๊ณ„ํš์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”. ์‹คํ–‰ ๊ณ„ํš์„ ํ™•์ธํ•ด๋ณธ ์ ์ด ์žˆ๋‚˜์š”?

ํžŒํŠธ์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

์ธ๋ฑ์Šค๊ฐ€ ์ž˜ ๋™์ž‘ํ•˜๊ณ  ์žˆ๋Š”์ง€ ์–ด๋–ป๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”? / ์ธ๋ฑ์Šค ์‚ฌ์šฉ์‹œ ์ฃผ์˜ํ•ด์•ผํ•  ์ ์— ๋Œ€ํ•ด์„œ ์•Œ๋ ค์ฃผ์„ธ์š”.

GROUP BY ์‚ฌ์šฉ์‹œ ์ธ๋ฑ์Šค๊ฐ€ ๊ฑธ๋ฆฌ๋Š” ์กฐ๊ฑด์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

์ด๋ฆ„, ๊ตญ๊ฐ€, ์„ฑ๋ณ„์ด ์žˆ๋Š” ํ…Œ์ด๋ธ”์—์„œ ์ธ๋ฑ์Šค๋ฅผ ์–ด๋–ป๊ฒŒ ๊ฑธ์–ด์•ผํ• ๊นŒ์š”?

REFERENCES
1. SEQUENTIAL & RANDOM
2. Real MySQL
3. B-Tree/B+Tree
4.Basic definition of Index

profile
๋ฐฑ์—”๋“œ ํ™”์ดํŒ… :)

0๊ฐœ์˜ ๋Œ“๊ธ€