Skip to content

Latest commit

ย 

History

History
658 lines (440 loc) ยท 44 KB

Index.md

File metadata and controls

658 lines (440 loc) ยท 44 KB

Index

์ˆœ์ฐจ I/O, ๋žœ๋ค I/O

์ธ๋ฑ์Šค ๋ ˆ์ธ์ง€ ์Šค์บ”, ์ธ๋ฑ์Šค ํ’€ ์Šค์บ”

ํด๋Ÿฌ์Šคํ„ฐ๋ง ์ธ๋ฑ์Šค, ๋…ผ ํด๋Ÿฌ์Šคํ„ฐ๋ง ์ธ๋ฑ์Šค

B-Tree Index, Hash Index

Hint

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

ํ•˜๋“œ ๋””์Šคํฌ ๋“œ๋ผ์ด๋ธŒ(HDD)์™€ ์†”๋ฆฌ๋“œ ์Šคํ…Œ์ดํŠธ ๋“œ๋ผ์ด๋ธŒ(SSD)

์ปดํ“จํ„ฐ ๋Œ€๋ถ€๋ถ„์˜ ์ฃผ์š” ์žฅ์น˜(CPU, RAM ๋“ฑ)์€ ๋Œ€๋ถ€๋ถ„ ๋””์ง€ํ„ธ ๋ฐฉ์‹์ด์ง€๋งŒ, HDD๋Š” ์•„๋‚ ๋กœ๊ทธ ๋ฐฉ์‹์˜ ์žฅ์น˜์ด๋‹ค. ๋””์ง€ํ„ธ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ์ฃผ์š” ์žฅ์น˜ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ์†Œํ†ต์€ ๊ต‰์žฅํžˆ ๋น ๋ฅธ๋ฐ, HDD๋งŒ ๊ทธ ํŽ˜์ด์Šค์— ๋งž์ถ”์ง€ ๋ชปํ•˜๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ž˜์„œ DB์—์„œ ๋””์Šคํฌ ์žฅ์น˜๋Š” ํ•ญ์ƒ ๋ณ‘๋ชฉ์ด ๋˜์–ด ๋А๋ ค์ง€๋Š” ํ˜„์ƒ์ด ๋นˆ๋ฒˆํ•˜๋‹ค. ์ด๋Ÿฌํ•œ ๊ธฐ๊ณ„์‹ ๋””์Šคํฌ ๋“œ๋ผ์ด๋ธŒ๋ฅผ ๋Œ€์ฒดํ•˜๊ธฐ ์œ„ํ•ด ๋‚˜์˜จ ๊ฒƒ์ด SSD(SolidStateDrive)์ด๋‹ค.

ssd

์ˆœ์ฐจ I/O์˜ ๊ฒฝ์šฐ SSD์™€ HDD๊ฐ€ ๋น„์Šทํ•œ ์„ฑ๋Šฅ์„ ๋ณด์ผ ์ˆ˜ ์žˆ์ง€๋งŒ, ๋žœ๋ค I/O์˜ ๊ฒฝ์šฐ SSD๊ฐ€ ํ›จ์”ฌ ์„ฑ๋Šฅ์ด ์ข‹๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„์—์„œ ์ˆœ์ฐจ I/O ์ž‘์—…์€ ๊ทธ๋‹ค์ง€ ๋น„์ค‘์ด ํฌ์ง€ ์•Š๊ณ  ๋žœ๋ค I/O๋ฅผ ํ†ตํ•ด ์ž‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ฐ๋Š” ์ž‘์—…์ด ๋งŽ์•„์„œ SSD๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ DBMS์— ์ ํ•ฉํ•˜๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค. (ํŠนํžˆ ์›น ์„œ๋น„์Šค ํ™˜๊ฒฝ)

๋žœ๋ค I/O์™€ ์ˆœ์ฐจ I/O

๊ธฐ๋ณธ์ ์œผ๋กœ ๋””์Šคํฌ ๋“œ๋ผ์ด๋ธŒ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ๋•Œ ์›ํŒ ํ”Œ๋ž˜ํ„ฐ๋ฅผ ํšŒ์ „ํ•˜๋ฉฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๋Š”๋‹ค.

  • ์ˆœ์ฐจ I/O๋Š” ๋…ผ๋ฆฌ์ /๋ฌผ๋ฆฌ์  ์ˆœ์„œ๋ฅผ ๋”ฐ๋ผ ์ฐจ๋ก€๋Œ€๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด ๋‚˜๊ฐ€๋Š” ๋ฐฉ์‹
  • ๋žœ๋ค I/O๋Š” ๋…ผ๋ฆฌ์ /๋ฌผ๋ฆฌ์  ์ˆœ์„œ๋ฅผ ๋”ฐ๋ฅด์ง€ ์•Š๊ณ  ํ•œ ๊ฑด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ธฐ ์œ„ํ•ด ํ•œ ๋ธ”๋ก์”ฉ ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ์‹

sequentialIO

์œ„์˜ ์˜ˆ์ œ์—์„œ 5๋ฒˆ๋งŒ ์ˆœ์ฐจI/O์ด๊ณ  ๋‚˜๋จธ์ง€๋Š” ๋žœ๋ค I/O์— ํ•ด๋‹นํ•œ๋‹ค. 5๋ฒˆ์€ ๋…ผ๋ฆฌ์ /๋ฌผ๋ฆฌ์ ์œผ๋กœ ํ•œ ๋ฐฉํ–ฅ์œผ๋กœ ์—ฐ์†ํ•˜๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด ๋“ค์ด์ง€๋งŒ, ๋‚˜๋จธ์ง€๋Š” ์—ฐ์†ํ•˜์ง€ ์•Š์€ ๋ฐฉํ–ฅ์œผ๋กœ ํ•œ ๋ธ”๋ก์”ฉ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด ๋“ค์ด๊ณ  ์žˆ๋‹ค.

๊ตฌ์ฒด์ ์ธ ๋™์ž‘ ๊ณผ์ •

randomIO

  • ์ˆœ์ฐจI/O๋Š” 3๊ฐœ์˜ ํŽ˜์ด์ง€๋ฅผ ๋””์Šคํฌ์— ๊ธฐ๋กํ•˜๊ธฐ ์œ„ํ•ด ํ•œ๋ฒˆ์˜ ์‹œ์Šคํ…œ ์ฝœ์„ ์š”์ฒญ
  • ๋žœ๋˜I/O๋Š” ์„ธ ๋ฒˆ์„ ์š”์ฒญ

์ฆ‰ ๋””์Šคํฌ์— ๊ธฐ๋กํ•  ์œ„์น˜๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด ์ˆœ์ฐจ I/O๋Š” ๋””์Šคํฌ ํ—ค๋”๋ฅผ 1๋ฒˆ ์›€์ง์˜€๊ณ , ๋žœ๋ค I/O๋Š” 3๋ฒˆ ์›€์ง์˜€๋‹ค.

๋””์Šคํฌ์— ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๊ณ  ์ฝ๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์€ ๋””์Šคํฌ ํ—ค๋”๋ฅผ ์›€์ง์—ฌ์„œ ์ฝ๊ณ  ์“ธ ์œ„์น˜๋กœ ์˜ฎ๊ธฐ๋Š” ๋‹จ๊ณ„์—์„œ ๊ฒฐ์ •๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์œ„ ๊ฒฝ์šฐ ์ˆœ์ฐจ I/O ๊ฐ€ ๋žœ๋ค I/O ๋ณด๋‹ค ์„ธ ๋ฐฐ๊ฐ€๋Ÿ‰ ๋น ๋ฅด๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ์ฟผ๋ฆฌ ํŠœ๋‹์€ ์ฟผ๋ฆฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ๊ผญ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ์ฝ๋„๋ก ์ฟผ๋ฆฌ๋ฅผ ๊ฐœ์„ ํ•˜์—ฌ ๋žœ๋ค I/O ์ž‘์—…์„ ์ค„์ด๋Š” ๊ฒƒ์ด ๋ชฉ์ ์ด๋‹ค. ์ˆœ์ฐจ I/O๋กœ ๋ฐ”๊ฟ”์„œ ์‹คํ–‰ํ•  ๋ฐฉ๋ฒ•์ด ์ ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ฐธ๊ณ ๋กœ ์ธ๋ฑ์Šค ๋ ˆ์ธ์ง€ ์Šค์บ”์€ ๋žœ๋ค I/O๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ํ’€ ํ…Œ์ด๋ธ” ์Šค์บ”์€ ์ˆœ์ฐจ I/O๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ๋งค์šฐ ํฐ ํ…Œ์ด๋ธ”์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฝ์„ ๋•Œ๋Š” ํ’€ ํ…Œ์ด๋ธ” ์Šค์บ”์„ ์‚ฌ์šฉํ•œ๋‹ค. (ex. ๋ฐ์ดํ„ฐ ์›จ์–ด ํ•˜์šฐ์Šค, ํ†ต๊ณ„ ์ž‘์—…)

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ๋Š” ๋Œ€๋ถ€๋ถ„ ๋ฐ์ดํ„ฐ๋ฅผ ๋นˆ๋ฒˆํ•˜๊ฒŒ ์ฝ๊ณ  ์“ฐ๊ธฐ ๋•Œ๋ฌธ์—, ๋žœ๋ค I/O ์˜ ๋ถ€ํ•˜๋ฅผ ์ค„์—ฌ์ฃผ๊ณ ์ž MySQL ์—์„œ๋Š” InnoDB ๋ฒ„ํผ ํ’€ ๋“ฑ์˜ ๊ธฐ๋Šฅ์ด ๋‚ด์žฅ๋œ ๊ฒƒ์ด๋‹ค.

Buffer Pool

๋ฒ„ํผ ํ’€์€ InnoDB๊ฐ€ ์•ก์„ธ์Šค ํ•  ๋•Œ ํ…Œ์ด๋ธ” ๋ฐ ์ธ๋ฑ์Šค ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹œํ•˜๋Š” ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด๋‹ค. ๋ฒ„ํผํ’€์€ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ง์ ‘ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒํ•˜์—ฌ ์ฒ˜๋ฆฌ ์†๋„๋ฅผ ๋†’์ธ๋‹ค ์ „์šฉ ์„œ๋ฒ„์—์„œ ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ์˜ ์ตœ๋Œ€ 80% ์ •๋„๊ฐ€ ๋ฒ„ํผํ’€์— ํ• ๋‹น๋œ๋‹ค.

๋Œ€๋Ÿ‰ ์ฝ๊ธฐ ์กฐ์ž‘์˜ ํšจ์œจ์„ฑ์„ ์œ„ํ•ด ๋ฒ„ํผ ํ’€์€ ์—ฌ๋Ÿฌ ํ–‰์„ ๋ณด์œ ํ•  ์ˆ˜ ์žˆ๋Š” ํŽ˜์ด์ง€๋กœ ๋ถ„ํ• ๋œ๋‹ค. ์บ์‹œ ๊ด€๋ฆฌ ํšจ์œจ์„ฑ์„ ์œ„ํ•ด ๋ฒ„ํผํ’€์€ ๋งํฌ๋œ ํŽ˜์ด์ง€ ๋ชฉ๋ก์œผ๋กœ ๊ตฌํ˜„๋œ๋‹ค. ๊ฑฐ์˜ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ๋Š” ๋‹ค์–‘ํ•œ LRU ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์บ์‹œ์—์„œ ์ข…๋ฃŒ(ํ˜น์€ ๋งŒ๋ฃŒ:aged out)๋œ๋‹ค.

๋ฒ„ํผ ํ’€์„ ํ™œ์šฉํ•˜์—ฌ ์ž์ฃผ ์•ก์„ธ์Šคํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์œ ์ง€ํ•˜๋Š” ๋…ธํ•˜์šฐ(๊ธฐ์ˆ )์€ MySQLํŠœ๋‹์˜ ์ค‘์š”ํ•œ ์ธก๋ฉด์ด๋‹ค.

buffer pool

  • head: ์ตœ๊ทผ์— ์ ‘๊ทผ๋œ (young) ํŽ˜์ด์ง€๋“ค์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.
  • tail: ์ ‘๊ทผ ์‹œ๊ธฐ๊ฐ€ ๊ฐ€์žฅ ์˜ค๋ž˜๋œ (old) ํŽ˜์ด์ง€๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.
  • ์‚ฌ์šฉ์ž ์ฟผ๋ฆฌ์—์„œ ๊ฐ€์žฅ ์ž์ฃผ ์ ‘๊ทผ ๋˜๋Š” ๋ฐ์ดํ„ฐ ํŽ˜์ด์ง€๋“ค์„ new sublist์— ๋ณด๊ด€ํ•œ๋‹ค. old sublist์—๋Š” ์ž˜ ์ ‘๊ทผ ๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋ฉฐ, ์ดํ›„์— eviction ๋Œ€์ƒ์œผ๋กœ ์„ ์ •๋œ๋‹ค.
  • ๋ฒ„ํผ ํ’€์˜ 3/8 ์€ old sublist๋กœ ์‚ฌ์šฉ๋œ๋‹ค.
  • ๋ฒ„ํผ ํ’€ ์ „์ฒด์˜ midpoint๋Š” new sublist์˜ tail๊ณผ old sublist์˜ head๊ฐ€ ๋งŒ๋‚˜๋Š” ์ง€์ ์ด๋‹ค.

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

์ธ๋ฑ์Šค๋Š” DBMS์˜ ์ €์žฅ ์„ฑ๋Šฅ์„ ํฌ์ƒํ•˜๊ณ  ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ์ž๋ฃŒ ๊ตฌ์กฐ์ด๋‹ค.

์ธ๋ฑ์Šค์˜ ๋ชฉ์  RDBMS์˜ ๊ฒ€์ƒ‰ ์†๋„๋ฅผ ๋†’์ด๋Š”๋ฐ ์žˆ๋‹ค.

Index์˜ ์›๋ฆฌ

Index๋ฅผ ํ•ด๋‹น ์ปฌ๋Ÿฌ์— ์ฃผ๊ฒŒ ๋˜๋ฉด ์ดˆ๊ธฐ Table ์ƒ์„ฑ์‹œ, FRM,MYD,MYI 3๊ฐœ์˜ ํŒŒ์ผ์ด ๋งŒ๋“ค์–ด์ง„๋‹ค.

  • FRKM: ํ…Œ์ด๋ธ” ๊ตฌ์กฐ๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ๋Š” ํŒŒ์ผ
  • MYD: ์‹ค์ œ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” ํŒŒ์ผ
  • MYI: Index ์ •๋ณด๊ฐ€ ๋“ค์–ด์žˆ๋Š” ํŒŒ์ผ

index๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ, MYI ํŒŒ์ผ์€ ๋น„์–ด์ ธ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ index๋ฅผ ํ•ด๋‹น ์ปฌ๋Ÿผ์— ๋งŒ๋“ค๊ฒŒ ๋˜๋ฉด ํ•ด๋‹น ์ปฌ๋Ÿผ์„ ๋”ฐ๋กœ ์ธ๋ฑ์‹ฑํ•˜์—ฌ MYI ํŒŒ์ผ์— ์ž…๋ ฅํ•œ๋‹ค.

์ดํ›„์— ์‚ฌ์šฉ์ž๊ฐ€ SELECT ์ฟผ๋ฆฌ๋กœ index๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉ ์‹œ ํ•ด๋‹น Table์„ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ MYI ํŒŒ์ผ์˜ ๋‚ด์šฉ์„ ๊ฒ€์ƒ‰ํ•œ๋‹ค.

๋งŒ์•ฝ, index๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ SELECT ์ฟผ๋ฆฌ๋ผ๋ฉด ํ•ด๋‹น Table Full Scanํ•˜์—ฌ ๋ชจ๋‘ ๊ฒ€์ƒ‰ํ•œ๋‹ค.

์ด๋Š” ์ฑ… ๋’ท ๋ถ€๋ถ„์— <์ฐพ์•„๋ณด๊ธฐ>์™€ ๊ฐ™์€ ์˜๋ฏธ๋กœ ์ •๋ฆฌํ•ด๋‘” ๋‹จ์–ด ์ค‘์—์„œ ์›ํ•˜๋Š” ๋‹จ์–ด๋ฅผ ์ฐพ์•„์„œ ํŽ˜์ด์ง€ ์ˆ˜๋ฅผ ๋ณด๊ณ  ์‰ฝ๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ๊ฐœ๋…๊ณผ ๊ฐ™๋‹ค. ๋งŒ์•ฝ ์ด <์ฐพ์•„๋ณด๊ธฐ>๊ฐ€ ์—†๋‹ค๋ฉด ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๋ชจ๋“  ํŽ˜์ด์ง€๋ฅผ ๋ณด๊ณ  ์ฐพ์•„์™€์•ผํ•  ๊ฒƒ์ด๋‹ค.

์˜ˆ์‹œ

SELECT *
FROM EMP
WHERE empno = 7902

๋ฐ์ดํ„ฐ ํŒŒ์ผ์˜ ๋ธ”๋ก์ด 10๋งŒ๊ฐœ ์ผ๋•Œ, ์œ„ SQL๋ฌธ์„ ์ˆ˜ํ–‰ ์‹œ์—

  1. ์„œ๋ฒ„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํŒŒ์‹ฑ ๊ณผ์ •์„ ๋งˆ์นœ ํ›„ DB buffer cache์— empno๊ฐ€ 7902์ธ ์ •๋ณด๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
  2. ์ •๋ณด๊ฐ€ ์—†์œผ๋ฉด ํ•˜๋“œ ๋””์Šคํฌ ํŒŒ์ผ์—์„œ 7902์ •๋ณด๋ฅผ ๊ฐ€์ง„ ๋ธ”๋ก์„ ๋ณต์‚ฌํ•ด์„œ DB buffer cache๋กœ ๊ฐ€์ ธ์˜จ ํ›„ 7900 ์ •๋ณด๋งŒ ๊ณจ๋ผ๋‚ด์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์คŒ

์ด๋•Œ index ์—ฌ๋ถ€์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง€๋Š”๋ฐ

  • index ์—†๋Š” ๊ฒฝ์šฐ: 7902 ์ •๋ณด๊ฐ€ ์–ด๋–ค ๋ธ”๋ก์— ๋“ค์–ด์žˆ๋Š”์ง€ ๋ชจ๋ฅด๋ฏ€๋กœ 10๋งŒ๊ฐœ ์ „๋ถ€ DB buffer cahce๋กœ ๋ณต์‚ฌํ•œ ํ›„ ํ•˜๋‚˜ํ•˜๋‚˜ ์ฐพ๋Š”๋‹ค.
  • index ์žˆ๋Š” ๊ฒฝ์šฐ: WHERE ์ ˆ์˜ ์ปฌ๋Ÿผ์˜ index๊ฐ€ ๋งŒ๋“ค์–ด์ ธ ์žˆ๋Š”์ง€ ํ™•์ธ ํ›„, ์ธ๋ฑ์Šค์— ๊ฐ€์„œ 7902 ์ •๋ณด๊ฐ€ ์–ด๋–ค ROWID๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•œ ํ›„ ํ•ด๋‹น ROWID์— ์žˆ๋Š” ๋ธ”๋ก๋งŒ ์ฐพ์•„๊ฐ€์„œ DB buffer cache์— ๋ณต์‚ฌํ•œ๋‹ค.

Index์˜ ์žฅ์ 

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

Index์˜ ๋‹จ์ 

  • ์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“ค๋ฉด .mdb ํŒŒ์ผ ํฌ๊ธฐ๊ฐ€ ๋Š˜์–ด๋‚œ๋‹ค.
  • ์‚ฌ์šฉ์ž๊ฐ€ ํ•œ ํŽ˜์ด์ง€๋ฅผ ๋™์‹œ์— ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ‘ํ–‰์„ฑ์ด ์ค„์–ด๋“ ๋‹ค.
  • ์ธ๋ฑ์Šค๋œ ํ•„๋“œ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธ(UPDATE)ํ•˜๊ฑฐ๋‚˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€(INSERT) ๋˜๋Š” ์‚ญ์ œ(DELETE) ํ•  ๋•Œ ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง„๋‹ค.
    • ๋งŒ์•ฝ INSER, DELETE, UPDATE๊ฐ€ ๋นˆ๋ฒˆํ•œ ์†์„ฑ์— ์ธ๋ฑ์Šค๋ฅผ ๊ฑธ๊ฒŒ ๋˜๋ฉด ์ธ๋ฑ์Šค์˜ ํฌ๊ธฐ๊ฐ€ ๋น„๋Œ€ํ•ด์ ธ์„œ ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง„๋‹ค.
    • ๋งŒ์•ฝ ์–ด๋–ค ํ…Œ์ด๋ธ”์— UPDATE์™€ DELETE๊ฐ€ ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ฐœ์ƒํ•œ๋‹ค๋ฉด ์‹ค์ œ ๋ฐ์ดํ„ฐ๋Š” 10๋งŒ ๊ฑด์ด์ง€๋งŒ, ์ธ๋ฑ์Šค๋Š” 100๋งŒ ๊ฑด์ด ๋„˜์–ด๊ฐ€๊ฒŒ ๋˜์–ด SQL๋ฌธ ์ฒ˜๋ฆฌ ์‹œ ๋น„๋Œ€ํ•ด์ง„ ์ธ๋ฑ์Šค์— ์˜ํ•ด ์˜คํžˆ๋ ค ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง€๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.
  • ์ธ๋ฑ์Šค๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•ด ์ถ”๊ฐ€์ ์ธ ๊ณต๊ฐ„์ด ํ•„์š”ํ•ด์ง„๋‹ค. (๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ 10% ๋‚ด์™ธ์˜ ๊ณต๊ฐ„์ด ์ถ”๊ฐ€๋กœ ํ•„์š”)
  • ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š”๋ฐ ์‹œ๊ฐ„์ด ๋งŽ์ด ์†Œ์š”๋  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์ž‘์—…์ด ์ž์ฃผ ์ผ์–ด๋‚  ๊ฒฝ์šฐ์— ์ธ๋ฑ์Šค๋ฅผ ์žฌ์ž‘์„ฑํ•ด์•ผ ํ•  ํ•„์š”๊ฐ€ ์žˆ๊ธฐ์— ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ๋ผ์น  ์ˆ˜ ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ ์–ด๋А ํ•„๋“œ๋ฅผ ์ธ๋ฑ์Šคํ•ด์•ผ ํ•˜๋Š”์ง€ ๋ฏธ๋ฆฌ ์‹œํ—˜ํ•ด๋ณด๊ณ  ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ์ธ๋ฑ์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ์ฟผ๋ฆฌ ์†๋„๊ฐ€ 1์ดˆ ์ •๋„ ๋นจ๋ผ์ง€์ง€๋งŒ, ๋ฐ์ดํ„ฐ ํ–‰์„ ์ถ”๊ฐ€ํ•˜๋Š” ์†๋„๋Š” 2์ดˆ ์ •๋„ ๋А๋ ค์ง€๊ฒŒ ๋˜์–ด ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, ๋ ˆ์ฝ”๋“œ ์ž ๊ธˆ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

๋˜, ๋‹ค๋ฅธ ํ•„๋“œ์— ๋Œ€ํ•œ ์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“ค๊ฒŒ ๋˜๋ฉด ์„ฑ๋Šฅ์ด ๋ณ„๋กœ ํ–ฅ์ƒ๋˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ…Œ์ด๋ธ”์— ํšŒ์‚ฌ ์ด๋ฆ„ ํ•„๋“œ์™€ ์„ฑ ํ•„๋“œ๊ฐ€ ์ด๋ฏธ ์ธ๋ฑ์Šค๋œ ๊ฒฝ์šฐ์— ์šฐํŽธ ๋ฒˆํ˜ธ๋ฅผ ํ•„๋“œ๋กœ ์ถ”๊ฐ€ํ•ด ์ธ๋ฑ์Šค์— ํฌํ•จํ•ด๋„ ์„ฑ๋Šฅ์ด ๊ฑฐ์˜ ํ–ฅ์ƒ๋˜์ง€ ์•Š๋Š”๋‹ค. ๋งŒ๋“œ๋Š” ์ฟผ๋ฆฌ์˜ ์ข…๋ฅ˜์™€ ๊ด€๊ณ„ ์—†์ด ๊ฐ€์žฅ ๊ณ ์œ ํ•œ ๊ฐ’์„ ๊ฐ–๋Š” ํ•„๋“œ๋งŒ ์ธ๋ฑ์Šคํ•ด์•ผ ํ•œ๋‹ค.

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

  • ๊ทœ๋ชจ๊ฐ€ ์ž‘์ง€ ์•Š์€ ํ…Œ์ด๋ธ”
  • INSERT, UPDATE, DELETE๊ฐ€ ์ž์ฃผ ๋ฐœ์ƒํ•˜์ง€ ์•Š์€ Column
  • WHERE ์ ˆ์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” Column
  • ์™ธ๋ž˜ํ‚ค๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” Column
  • Join์— ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” Column
  • ๋ฐ์ดํ„ฐ์˜ ์ค‘๋ณต๋„๊ฐ€ ๋‚ฎ์€ ์ปฌ๋Ÿผ (์นด๋””๋„๋ฆฌํ‹ฐ๊ฐ€ ๋†’์€ ์ปฌ๋Ÿผ)
    • ์˜ˆ๋ฅผ ๋“ค์–ด ์„ฑ๋ณ„์ด๋ผ๋Š” ์ปฌ๋Ÿผ์ด ์žˆ๋‹ค๊ณ  ํ•˜์ž. (์„ฑ๋ณ„์€ ๋‚จ์ž์™€ ์—ฌ์ž๋งŒ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •)
    • ์ด๋•Œ ์„ฑ๋ณ„์— ์ธ๋ฑ์Šค๋ฅผ ๊ฑธ์–ด ๋ดค์ž ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’์ด 2๊ฐœ ๋ฐ–์— ์—†์œผ๋ฏ€๋กœ ํ•˜๋‚˜์˜ ์„ฑ๋ณ„์ด ๋ถ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ๋ฐ ์žฌ์ˆ˜ ์—†์œผ๋ฉด Full Scan์„ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
    • ๋˜ํ•œ, ์ธ๋ฑ์Šค๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ Key, Value์˜ ํŠธ๋ฆฌ ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š”๋ฐ, Key๊ฐ€ ์ค‘๋ณต๋˜์–ด ์—ฌ๋Ÿฌ ๊ฐœ ์กด์žฌํ•˜๋ฉด ๊ฒ€์ƒ‰ํ•  ๋Œ€์ƒ์ด ์ฆ๊ฐ€ํ•œ๋‹ค.
    • ์ด๋Ÿฌํ•œ ์ด์œ ๋กœ ๋ฐ์ดํ„ฐ์˜ ์ค‘๋ณต๋„๊ฐ€ ๋‚ฎ์•„์„œ ๋ถ„ํฌ๋„๊ฐ€ ๋†’์€ ์ปฌ๋Ÿผ์— ๋Œ€ํ•ด ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

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

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

DML์— ์ทจ์•ฝ

INSERT: ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ธ๋ฑ์Šค๋ฅผ ์ถ”๊ฐ€ํ•จ DELETE: ์‚ญ์ œํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ž‘์—…์„ ์ง„ํ–‰ํ•จ UPDATE: ๊ธฐ์กด์˜ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ ์ฒ˜๋ฆฌํ•˜๊ณ , ๊ฐฑ์‹ ๋œ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ์ธ๋ฑ์Šค๋ฅผ ์ถ”๊ฐ€ํ•จ

  1. INSERT
  • indext split : ์ธ๋ฑ์Šค์˜ Block๋“ค์ด ํ•˜๋‚˜์—์„œ ๋‘๊ฐœ๋กœ ๋‚˜๋ˆ„์–ด์ง€๋Š” ํ˜„์ƒ.
  • ์ธ๋ฑ์Šค๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌ๋˜์–ด์•ผ ํ•œ๋‹ค. ๊ธฐ์กด ๋ธ”๋ก์— ์—ฌ์œ  ๊ณต๊ฐ„์ด ์—†๋Š” ์ƒํ™ฉ์—์„œ ๊ทธ ๋ธ”๋ก์— ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๊ฐ€ ์ž…๋ ฅ๋˜์–ด์•ผ ํ•  ๊ฒฝ์šฐ, ์˜ค๋ผํด์ด ๊ธฐ์กด ๋ธ”๋ก์˜ ๋‚ด์šฉ ์ค‘ ์ผ๋ถ€๋ฅผ ์ƒˆ ๋ธ”๋ก์—๋‹ค๊ฐ€ ๊ธฐ๋กํ•œ ํ›„, ๊ธฐ์กด ๋ธ”๋ก์— ๋นˆ ๊ณต๊ฐ„์„ ๋งŒ๋“ค์–ด์„œ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฒŒ ๋œ๋‹ค.
  • ์„ฑ๋Šฅ๋ฉด์—์„œ ๋งค์šฐ ๋ถˆ๋ฆฌํ•˜๋‹ค.
    • Index split์€ ์ƒˆ๋กœ์šด ๋ธ”๋ก์„ ํ• ๋‹น๋ฐ›๊ณ  Key๋ฅผ ์˜ฎ๊ธฐ๋Š” ๋ณต์žกํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ๋ชจ๋“  ์ˆ˜ํ–‰ ๊ณผ์ •์ด Redo์— ๊ธฐ๋ก๋˜๊ณ  ๋งŽ์€ ์–‘์˜ Redo๋ฅผ ์œ ๋ฐœํ•œ๋‹ค.
    • Index split์ด ์ด๋ฃจ์–ด์ง€๋Š” ๋™์•ˆ ํ•ด๋‹น ๋ธ”๋ก์— ๋Œ€ํ•ด ํ‚ค ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๋ฉด ์•ˆ๋˜๋ฏ€๋กœ DML์ด ๋ธ”๋กœํ‚น๋œ๋‹ค.
  1. DELETE
  • ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ Delete๋  ๊ฒฝ์šฐ, ์ง€์›Œ์ง€๊ณ  ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ทธ ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • index์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ delete๋  ๊ฒฝ์šฐ, ๋ฐ์ดํ„ฐ๊ฐ€ ์ง€์›Œ์ง€์ง€ ์•Š๊ณ  ์‚ฌ์šฉ ์•ˆ๋จ ํ‘œ์‹œ๋งŒ ํ•ด๋‘”๋‹ค.
  • ์ฆ‰, ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ๊ฐ€ 1๋งŒ๊ฑด ์žˆ๋Š” ๊ฒฝ์šฐ, ์ธ๋ฑ์Šค์—๋Š” 2๋งŒ๊ฑด์ด ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๋œป์ด๋‹ค.
  • ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•ด๋„ ์ˆ˜ํ–‰ ์†๋„๋ฅผ ๊ธฐ๋Œ€ํ•˜๊ธฐ ํž˜๋“ค๋‹ค.
  1. UPDATE
  • ์ธ๋ฑ์Šค์—๋Š” Update ๊ฐœ๋…์ด ์—†๋‹ค.
  • ํ…Œ์ด๋ธ”์— update๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ, ์ธ๋ฑ์Šค์—์„œ๋Š” delete๊ฐ€ ๋จผ์ € ๋ฐœ์ƒํ•œ ํ›„ ์ƒˆ๋กœ์šด ์ž‘์—…์˜ insert ์ž‘์—…์ด ๋ฐœ์ƒํ•œ๋‹ค.
  • delete์™€ insert ๋‘ ๊ฐœ์˜ ์ž‘์—…์ด ์ธ๋ฑ์Šค์—์„œ ๋™์‹œ์— ์ผ์–ด๋‚˜ ๋‹ค๋ฅธ DML๋ณด๋‹ค ๋” ํฐ ๋ถ€ํ•˜๋ฅผ ์ฃผ๊ฒŒ ๋œ๋‹ค

์ธ๋ฑ์Šค ๋ ˆ์ธ์ง€ ์Šค์บ” vs ์ธ๋ฑ์Šค ํ’€ ์Šค์บ”

์ธ๋ฑ์Šค ๋ ˆ์ธ์ง€ ์Šค์บ”

ํ…Œ์ด๋ธ”์˜ ์ผ๋ถ€ ๋ ˆ์ฝ”๋“œ์—๋งŒ ์—‘์„ธ์Šคํ•ด์„œ ์ฝ์–ด๋“ค์ž„

EXPLAIN SELECT * FROM item WHERE id BETWEEN 1 AND 10

์ •์˜: ์ธ๋ฑ์Šค ๋ฃจํŠธ ๋ธ”๋ก์—์„œ ๋ฆฌํ”„ ๋ธ”๋ก๊นŒ์ง€ ์ˆ˜์ง์ ์œผ๋กœ ํƒ์ƒ‰ํ•œ ํ›„์— ๋ฆฌํ”„ ๋ธ”๋ก์„ ํ•„์š”ํ•œ ๋ฒ”์œ„๋งŒ ์Šค์บ”ํ•˜๋Š” ๋ฐฉ์‹

  • B Tree ์ธ๋ฑ์Šค์˜ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์—‘์„ธ์Šค ๋ฐฉ์‹
    • ๋ฃจํŠธ๋…ธ๋“œ๋ถ€ํ„ฐ ๋น„๊ต๋ฅผ ์‹œ์ž‘ํ•ด ๋ฆฌํ”„๋…ธ๋“œ์— ๋„๋‹ฌํ•˜์—ฌ ์‹œ์ž‘์ง€์ ์„ ์ฐพ๋Š”๋‹ค. ๊ทธ ํ›„ ๋ฆฌํ”„๋…ธ๋“œ์˜ ๋ ˆ์ฝ”๋“œ๋งŒ ์ˆœ์„œ๋Œ€๋กœ ์ญ‰ ์ฝ๋Š”๋‹ค. ๋งŒ์•ฝ ์Šค์บ”ํ•˜๋‹ค๊ฐ€ ๋ฆฌํ”„๋…ธ๋“œ์˜ ๋๊นŒ์ง€์ฝ์œผ๋ฉด ๋ฆฌํ”„๋…ธ๋“œ๊ฐ„์˜ ๋งํฌ๋ฅผ ์ด์šฉํ•ด ๋‹ค์Œ ๋ฆฌํ”„๋…ธ๋“œ๋ฅผ ์ฐพ์•„์„œ ๋‹ค์‹œ ์Šค์บ”ํ•œ๋‹ค.

    • ์ด ๋•Œ ์ค‘์š”ํ•œ ๊ฒƒ์€ ๋ฆฌํ”„ ๋…ธ๋“œ์— ์ €์žฅ๋œ ๋ ˆ์ฝ”๋“œ ์ฃผ์†Œ๋กœ ๋ฐ์ดํ„ฐํŒŒ์ผ์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฝ์–ด์˜ค๋Š”๋ฐ ๋ ˆ์ฝ”๋“œ ํ•œ๊ฑด ํ•œ๊ฑด ๋‹จ์œ„๋กœ ๋žœ๋ค I/O๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ๋ฐ์ดํ„ฐ์˜ ์ฃผ์†Œ๋ฅผ ์ฐพ๋Š” ๊ฒƒ์€ ๋น„์šฉ์ด ๋งŽ์ด ๋“ค์ง€๋Š” ์•Š์ง€๋งŒ, ๋žœ๋ค I/O์—๋Š” ๋น„์šฉ์ด ๋งŽ์ด ๋ฐœ์ƒํ•œ๋‹ค..

  • ์ธ๋ฑ์Šค๋ฅผ ์Šค์บ”ํ•˜๋Š” ๋ฒ”์œ„๋ฅผ ์–ผ๋งˆ๋งŒํผ ์ค„์ผ ์ˆ˜ ์žˆ๋А๋ƒ์™€ ํ…Œ์ด๋ธ”๋กœ ์—‘์„ธ์Šคํ•˜๋Š” ํšŸ์ˆ˜๋ฅผ ์–ผ๋งˆ๋งŒํผ ์ค„์ผ์ˆ˜ ์žˆ๋А๋ƒ

indexRangeScan

  • ๋ฃจํŠธ ๋…ธ๋“œ -> ๋ธŒ๋žœ์น˜ ๋…ธ๋“œ -> ๋ฆฌํ”„ ๋…ธ๋“œ ์ˆœ์œผ๋กœ ํƒ์ƒ‰
  • ๋ฆฌํ”„ ๋…ธ๋“œ์—์„œ ์‹œ์ž‘ํ•  ์ง€์ ์„ ์ฐพ์œผ๋ฉด, ๊ทธ ๋‹ค์Œ๋ถ€ํ„ฐ๋Š” ๋ฆฌํ”„ ๋…ธ๋“œ์˜ ๋ ˆ์ฝ”๋“œ๋งŒ ์ˆœ์„œ๋Œ€๋กœ ์ฝ์œผ๋ฉด ๋œ๋‹ค.
  • ๋ฆฌํ”„ ๋…ธ๋“œ์˜ ๋๊นŒ์ง€ ์ฝ์œผ๋ฉด ๋ฆฌํ”„ ๋…ธ๋“œ๊ฐ„์˜ ๋งํฌ๋ฅผ ํ†ตํ•ด ๋‹ค์Œ ๋ฆฌํ”„ ๋…ธ๋“œ๋ฅผ ์ฐพ์•„์„œ ์Šค์บ”ํ•œ๋‹ค.
  • ์ตœ์ข…์ ์œผ๋กœ ์Šค์บ” ์ข…๋ฃŒ ์ง€์ ์„ ์ฐพ์œผ๋ฉด ์ง€๊ธˆ๊นŒ์ง€ ์ฝ์€ ๋ ˆ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์ฟผ๋ฆฌ๋ฅผ ์ข…๋ฃŒํ•œ๋‹ค.
    • ๋ฐ์ดํ„ฐ ํŒŒ์ผ์—์„œ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฝ์–ด์˜ฌ ๋•Œ ๋ ˆ์ฝ”๋“œ ํ•œ๊ฑด๋งˆ๋‹ค ๋žœ๋คI/O๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
    • ๊ทธ๋ž˜์„œ ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š” ์ž‘์—…์€ ๋น„์šฉ์ด ๋งŽ์ด ๋“ ๋‹ค๊ณ  ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
    • ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ์ฝ์–ด์•ผ ํ•  ๋ฐ์ดํ„ฐ๊ฐ€ ์ „์ฒด์˜ 20%~25%๋ฅผ ๋„˜์œผ๋ฉด ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ํ…Œ์ด๋ธ” ์Šค์บ” ๋ฐฉ์‹์ด ๋” ํšจ์œจ์ ์ธ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์ด ๋œ๋‹ค.
  • ์ธ๋ฑ์Šค ๋ ˆ์ธ์ง€ ์Šค์บ”์€ MYSQL์—์„œ ์‹คํ–‰๊ณ„ํš์„ ๋ณผ๋•Œ range๋กœ ๋‚˜์™€์žˆ๋‹ค.
  • ์ฃผ๋กœ, <, >, IS NULL, BETWEEN, IN, LIKE ๋“ฑ์˜ ์—ฐ์‚ฐ์„ ์ด์šฉํ•˜์—ฌ ์ธ๋ฑ์Šค๋ฅผ ๊ฒ€์ƒ‰ํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.
  • ๋ณดํ†ต, DBA ๋ž‘ ์–˜๊ธฐํ•  ๋•Œ const, ref, range ์ ‘๊ทผ ๋ฐฉ๋ฒ•์„ ๊ตฌ๋ถ„ํ•ด์„œ ์–˜๊ธฐํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๊ฑฐ์˜ ์—†๊ณ  ์ด ์„ธ๊ฐ€์ง€๋ฅผ ํ†ตํ‹€์–ด์„œ ์ธ๋ฑ์Šค ๋ ˆ์ธ์ง€ ์Šค์บ” ๋˜๋Š” ๋ ˆ์ธ์ง€ ์Šค์บ”์ด๋ผ๊ณ  ๋งํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค๊ณ  ํ•œ๋‹ค.
  • Index Range Scan ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์„ ๋‘ ์ปฌ๋Ÿผ์„ ๊ฐ€๊ณตํ•˜์ง€ ์•Š์€ ์ƒํƒœ๋กœ ์กฐ๊ฑด์ ˆ์— ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

์ธ๋ฑ์Šค ํ’€ ์Šค์บ”

ํ…Œ์ด๋ธ”์— ํฌํ•จ๋œ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ์ฝ์–ด๋“ค์ธ๋‹ค.

indexfullscan

  • ์ธ๋ฑ์Šค ํ’€ ์Šค์บ”์€ ์ธ๋ฑ์Šค์˜ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๋ชจ๋‘ ์ฝ๋Š” ๋ฐฉ์‹์„ ๋งํ•œ๋‹ค.
    • ๋Œ€ํ‘œ์ ์œผ๋กœ ์ฟผ๋ฆฌ์˜ ์กฐ๊ฑด์ ˆ์— ์‚ฌ์šฉ๋œ ์ปฌ๋Ÿผ์ด ์ธ๋ฑ์Šค์˜ ์ฒซ๋ฒˆ์งธ ์ปฌ๋Ÿผ์ด ์•„๋‹Œ ๊ฒฝ์šฐ ์ธ๋ฑ์Šค ํ’€ ์Šค์บ” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์ˆ˜์ง์  ํƒ์ƒ‰ ์—†์ด ์ธ๋ฑ์Šค ๋ฆฌํ”„ ๋ธ”๋ก์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ์ˆ˜ํ‰์ ์œผ๋กœ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ์‹
  • ์ธ๋ฑ์Šค์˜ ํฌ๊ธฐ๋Š” ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ๋ณด๋‹ค ํ›จ์”ฌ ์ž‘๊ธฐ ๋•Œ๋ฌธ์— ํ…Œ์ด๋ธ” ํ’€ ์Šค์บ”๋ณด๋‹ค ๋น ๋ฅธ ๋ฐฉ์‹์ด๋‹ค.
  • ์ตœ์ ์˜ ์ธ๋ฑ์Šค๊ฐ€ ์—†์„ ๋•Œ ์ฐจ์„ ์œผ๋กœ ์„ ํƒ
  • ์ธ๋ฑ์Šค ์„ ๋‘ ์ปฌ๋Ÿผ์ด ์กฐ๊ฑด์ ˆ์— ์—†์œผ๋ฉด Table Full Scan์„ ๊ณ ๋ คํ•˜๋‚˜, Table Full Scan๋ณด๋‹ค I/O๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๊ฑฐ๋‚˜ ์ •๋ ฌ๋œ ๊ฒฐ๊ณผ๋ฅผ ์‰ฝ๊ฒŒ ์–ป์„ ์ˆ˜ ์žˆ์„ ๊ฒฝ์šฐ Index Full Scan ์„ ํƒ
  • ์ธ๋ฑ์Šค๋ฅผ ์ด์šฉํ•œ sort ์—ฐ์‚ฐ ๋Œ€์ฒด : first_rows
    • ์ „์ฒด ์ง‘ํ•ฉ ์ค‘ ์ฒ˜์Œ ์ผ๋ถ€๋งŒ์„ ๋น ๋ฅด๊ฒŒ ๋ฆฌํ„ดํ•ด์•ผํ•˜๋ฏ€๋กœ ์˜ตํ‹ฐ๋งˆ์ด์ €๋Š” ์ „๋žต์ ์œผ๋กœ Index Full Scan ์ˆ˜ํ–‰
  • ๋งŒ์•ฝ ๊ฒฐ๊ณผ ์ง‘ํ•ฉ์ด ๋งŽ์„ ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ๋ฅผ ๋ฉˆ์ถ”์ง€ ์•Š๊ณ  ๋๊นŒ์ง€ fetchํ•œ๋‹ค๋ฉด ์ธ๋ฑ์Šค ์Šค์บ”์ด ํ…Œ์ด๋ธ” ์Šค์บ”๋ณด๋‹ค ๋ถˆ๋ฆฌ : ๋งŽ์€ I/O๋ฅผ ์ผ์œผํ‚ค๋ฉด์„œ ์„œ๋ฒ„ ์ž์›์„ ๋‚ญ๋น„ ์ดˆ๋ž˜

Full Table Scan

ํ…Œ์ด๋ธ”์— ์กด์žฌํ•˜๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด๊ฐ€๋ฉด์„œ ์กฐ๊ฑด์— ๋งž์œผ๋ฉด ๊ฒฐ๊ณผ๋กœ ์ถ”์ถœํ•˜๊ณ  ์กฐ๊ฑด์— ๋งž์ง€ ์•Š์œผ๋ฉด ๋ฒ„๋ฆฌ๋Š” ๋ฐฉ์‹์ด๋‹ค.

fulltablescan ์œ„ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์ผ๋ฐ˜์ ์œผ๋กœ ๋ธ”๋ก๋“ค์€ ์„œ๋กœ ์ธ์ ‘๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, Full Table Scan์€ ํ•œ๋ฒˆ์€ I/O์— ์—ฌ๋Ÿฌ ๋ธ”๋ก์„ ์˜ฎ๊ฒจ์˜จ๋‹ค. ์ฆ‰ ํ•œ๋ฒˆ์˜ I/O์— ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์ค‘ ๋ธ”๋ก ๋‹จ์œ„๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ๊ฐ€์ ธ์˜ค๊ธฐ ๋•Œ๋ฌธ์—, row ๋‹น ์†Œ์š”๋˜๋Š” ์ž…์ถœ๋ ฅ ๋น„์šฉ์ด ์ธ๋ฑ์Šค ์Šค์บ”์— ๋น„ํ•ด ์ ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฎ๊ฒจ์ง„ ๋ธ”๋ก๋“ค์€ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฝํžŒ๋‹ค.

Index์˜ ๋ถ„๋ฅ˜

์—ญํ• ๋ณ„

  • ํด๋Ÿฌ์Šคํ„ฐ ์ธ๋ฑ์Šค
    • ํ…Œ์ด๋ธ”์˜ ๊ธฐ๋ณธ ํ‚ค(PK)์— ๋Œ€ํ•ด ์ ์šฉ๋˜๋Š” ์ธ๋ฑ์Šค
  • ๋น„ํด๋Ÿฌ์Šคํ„ฐ ์ธ๋ฑ์Šค
    • ํ…Œ์ด๋ธ”์˜ ๊ธฐ๋ณธ ํ‚ค ์™ธ์— ๋‹ค๋ฅธ ์ปฌ๋Ÿผ์— ์ ์šฉ๋œ ์ธ๋ฑ์Šค
  • ์œ ๋‹ˆํฌ ์ธ๋ฑ์Šค
    • ํ…Œ์ด๋ธ”์˜ ๊ธฐ๋ณธ ํ‚ค๋Š” ์•„๋‹ˆ์ง€๋งŒ, ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” Unique ์†์„ฑ์ด ๋“ค์–ด๊ฐ„ ์ปฌ๋Ÿผ์— ์ ์šฉ๋œ ์ธ๋ฑ์Šค
    • ์ฐธ๊ณ ๋กœ ํด๋Ÿฌ์Šคํ„ฐ ์ธ๋ฑ์Šค๋Š” ์œ ๋‹ˆํฌ ์ธ๋ฑ์Šค + Not Null ์†์„ฑ์„ ๋„๊ณ ์žˆ๋‹ค.
    • ์œ ๋‹ˆํฌ ์ธ๋ฑ์Šค๋„ ํ•œ๊บผ๋ฒˆ์— ๋น„ํด๋Ÿฌ์Šคํ„ฐ ์ธ๋ฑ์Šค๋กœ ๋ณด๊ธฐ๋„ ํ•œ๋‹ค.(๊ธฐ๋ณธ ํ‚ค๋Š” ์•„๋‹ˆ๋ฏ€๋กœ)

๋ฐ์ดํ„ฐ ์ €์žฅ ๋ฐฉ์‹ ๋ณ„

  • B-Tree ์ธ๋ฑ์Šค
  • R-Tree ์ธ๋ฑ์Šค
  • Hash ์ธ๋ฑ์Šค
  • Fractal-Tree ์ธ๋ฑ์Šค
  • Merge ์ธ๋ฑ์Šค

์ฃผ๋กœ B-Tree, R-Tree, Hash ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

๋ฐ์ดํ„ฐ ์ค‘๋ณต ํ—ˆ์šฉ ์—ฌ๋ถ€ ๋ณ„

  • ์œ ๋‹ˆํฌ(Unique) ์ธ๋ฑ์Šค
  • ๋…ผ ์œ ๋‹ˆํฌ(Non-Unique) ์ธ๋ฑ์Šค

๊ธฐ๋Šฅ ๋ณ„

  • ์ „๋ฌธ ๊ฒ€์ƒ‰์šฉ ์ธ๋ฑ์Šค
  • ๊ณต๊ฐ„ ๊ฒ€์ƒ‰์šฉ ์ธ๋ฑ์Šค

ํ•˜๋‚˜์”ฉ ์‚ดํŽด๋ณด์ž ๐Ÿค—

๐Ÿ“Œ Clustered Index vs Non- Clustered Index Index

(Primary Index vs Secondary Index)

PK ๋Š” ์šฐ๋ฆฌ๊ฐ€ ํ”ํžˆ ์•Œ๊ณ  ์žˆ๋Š” ์‹๋ณ„์ž๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ํ…Œ์ด๋ธ”์—์„œ PK ๋ฅผ ์ƒ์„ฑํ•˜๋ฉด Index ์— PK ์— ๊ด€ํ•œ ์ธ๋ฑ์Šค๊ฐ€ ์ƒ๊ธด๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, PK ๋Š” ๋ ˆ์ฝ”๋“œ๋ฅผ ๋Œ€ํ‘œํ•˜๋Š” ์ปฌ๋Ÿผ์˜ ๊ฐ’์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ์ธ๋ฑ์Šค๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

PK ๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€์˜ ์ธ๋ฑ์Šค๋“ค์„ Secondary Index ๋ผ๊ณ  ํ•œ๋‹ค

clustered: ๊ตฐ์ง‘ํ™” clustered index: ๊ตฐ์ง‘ํ™” ๋œ ์ธ๋ฑ์Šค

ํด๋Ÿฌ์Šคํ„ฐ๋“œ ์ธ๋ฑ์Šค๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ํ…Œ์ด๋ธ”์— ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์ €์žฅ ๋˜๋Š” ์ˆœ์„œ๋ฅผ ์ •์˜(์„ค์ •)ํ•œ๋‹ค.

ํด๋Ÿฌ์Šคํ„ฐ๋“œ ์ธ๋ฑ์Šค๋Š” ํ…Œ์ด๋ธ”์˜ ํ”„๋ผ์ด๋จธ๋ฆฌ ํ‚ค์— ๋Œ€ํ•ด์„œ๋งŒ ์ ์šฉ๋˜๋Š” ๋‚ด์šฉ์ด๋‹ค.

๋ฐ์ดํ„ฐ๊ฐ€ ํ…Œ์ด๋ธ”์— ์‚ฝ์ž…๋˜๋Š” ์ˆœ์„œ์— ์ƒ๊ด€์—†์ด Index๋กœ ์ƒ์„ฑ๋˜์–ด ์žˆ๋Š” ์ปฌ๋Ÿผ์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ๋˜์–ด ์‚ฝ์ž…๋œ๋‹ค.

clustered

์ˆœ์„œ๋Š” ์˜ค์ง ํ•˜๋‚˜์˜ ์ปฌ๋Ÿผ์œผ๋กœ ๊ฒฐ์ •๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ค‘๊ฐ„์— ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฝ์ž…๋œ๋‹ค๋ฉด ์ดํ›„์˜ ๋ชจ๋“  ์ปฌ๋Ÿผ์„ ํ•œ ์นธ์”ฉ ์ด๋™์‹œ์ผœ์ค˜์•ผํ•œ๋‹ค. index๊ฐ€ ๊ตฐ์ง‘ํ™” ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

ํด๋Ÿฌ์Šคํ„ฐ๋“œ ์ธ๋ฑ์Šค์—์„œ๋Š” ํ”„๋ผ์ด๋จธ๋ฆฌ ํ‚ค ๊ฐ’์— ์˜ํ•ด ๋ ˆ์ฝ”๋“œ์˜ ์ €์žฅ ์œ„์น˜๊ฐ€ ๊ฒฐ์ •๋˜๋ฉฐ ํ”„๋ผ์ด๋จธ๋ฆฌ ํ‚ค ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๋ฉด ๊ทธ ๋ ˆ์ฝ”๋“œ์˜ ๋ฌผ๋ฆฌ์ ์ธ ์ €์žฅ ์œ„์น˜ ๋˜ํ•œ ๋ณ€๊ฒฝ๋˜์–ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋ผ์ด๋จธ๋ฆฌ ํ‚ค๋ฅผ ์‹ ์ค‘ํ•˜๊ฒŒ ๊ฒฐ์ •ํ•˜๊ณ  ํด๋Ÿฌ์Šคํ„ฐ๋“œ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

ํด๋Ÿฌ์Šคํ„ฐ๋“œ ์ธ๋ฑ์Šค๋Š” ํ…Œ์ด๋ธ” ๋‹น ํ•œ ๊ฐœ๋งŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. - ํ”„๋ผ์ด๋จธ๋ฆฌ ํ‚ค์— ๋Œ€ํ•ด์„œ๋งŒ ์ ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค, ์ด์— ๋ฐ˜ํ•ด non ํด๋Ÿฌ์Šคํ„ฐ๋“œ ์ธ๋ฑ์Šค๋Š” ํ…Œ์ด๋ธ” ๋‹น ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

Clustered Index ๊ตฌ์กฐ

clusteredIndex

Clustered ์ธ๋ฑ์Šค์˜ ๊ตฌ์กฐ์ด๋‹ค. Data Page ์˜ ๋ฐ์ดํ„ฐ๋“ค์ด ์ˆœ์ฐจ์ ์œผ๋กœ ์ •๋ ฌ๋˜์–ด์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Leaf level ๊ณผ DataPage๊ฐ€ ๋™์ผํ•œ ๊ตฌ์กฐ๋ฅผ ๊ฐ–๋Š”๋‹ค.

  • Clustered Index๋Š” ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ์–ด ๊ฒ€์ƒ‰ ์†๋„๊ฐ€ Non-Clustered Index๋ณด๋‹ค ๋” ๋น ๋ฅด๋‹ค.

  • ๋ฐ์ดํ„ฐ์˜ ์ž…๋ ฅ/์ˆ˜์ •/์‚ญ์ œ ์‹œ์—๋„ ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ์ž…๋ ฅ/์ˆ˜์ •/์‚ญ์ œ ์†๋„๋Š” ๋” ๋А๋ฆฌ๋‹ค.

InnoDB ํ…Œ์ด๋ธ”์€ ์–ด๋–ป๊ฒŒ ํด๋Ÿฌ์Šคํ„ฐ ํ…Œ์ด๋ธ”๋กœ ๊ตฌ์„ฑ๋ ๊นŒ?

  1. ํ”„๋ผ์ด๋จธ๋ฆฌ ํ‚ค๊ฐ€ ์žˆ์œผ๋ฉด PK ๋ฅผ ํด๋Ÿฌ์Šคํ„ฐ ํ‚ค๋กœ ์„ ํƒ
  2. NOT NULL ์˜ต์…˜์˜ ์œ ๋‹ˆํฌ ์ธ๋ฑ์Šค ์ค‘์—์„œ ์ฒซ ๋ฒˆ์งธ ์ธ๋ฑ์Šค๋ฅผ ํด๋Ÿฌ์Šคํ„ฐ ํ‚ค๋กœ ์„ ํƒ
  3. ์ž๋™์œผ๋กœ ์œ ๋‹ˆํฌํ•œ ๊ฐ’์„ ๊ฐ€์ง€๋„๋ก ์ฆ๊ฐ€๋˜๋Š” ์ปฌ๋Ÿผ์„ ๋‚ด๋ถ€์ ์œผ๋กœ ์ถ”๊ฐ€ํ•œ ํ›„, ํด๋Ÿฌ์Šคํ„ฐ ํ‚ค๋กœ ์„ ํƒ

๋”ฐ๋ผ์„œ, PK ๋‚˜ Unique Index ๊ฐ€ ์—†์œผ๋ฉด ๋‚ด๋ถ€์ ์œผ๋กœ ์ƒ์„ฑํ•œ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ๋ง ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ํ‚ค๊ฐ€ ์‚ฌ์šฉ์ž์— ๋…ธ์ถœ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ํด๋Ÿฌ์Šคํ„ฐ๋ง ์ธ๋ฑ์Šค์˜ ํ˜œํƒ์„ ๋ณผ ์ˆ˜ ์—†๋‹ค.

MySQL ์—์„œ PK ๋ฅผ ์ธ์กฐํ‚ค๋กœ ์‚ฌ์šฉํ•˜๊ณ  Auto_Increment ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

์˜ˆ๋ฅผ๋“ค์–ด, PK ๊ฐ€ ์ฃผ๋ฏผ๋“ฑ๋ก๋ฒˆํ˜ธ๋กœ ์žกํ˜€์žˆ๋‹ค๊ณ  ํ•ด๋ณด์ž.

@Id
private Long jumin;

PK ๊ฐ€ ์ฃผ๋ฏผ๋“ฑ๋ก ๋ฒˆํ˜ธ๋กœ ์žก๊ฒŒ๋˜๋ฉด DB ์„ฑ๋Šฅ ์ด์Šˆ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค.

  • ํด๋Ÿฌ์Šคํ„ฐ๋ง ์ธ๋ฑ์Šค์˜ ํŠน์ง•์„ ๋– ์˜ฌ๋ฆฌ๋ฉด ๋˜๋Š”๋ฐ, ํด๋Ÿฌ์Šคํ„ฐ๋ง ์ธ๋ฑ์Šค๋Š” PK ์˜ ๋“ฑ๋ก, ๋ณ€๊ฒฝ์— ์žˆ์–ด ๋А๋ฆฌ๋‹ค๊ณ  ํ•˜์˜€๋‹ค.
  • ์ฆ‰, AUTO_INCREMENT ๋กœ ๋˜์–ด์žˆ์ง€ ์•Š์œผ๋ฉด ํšŒ์›์˜ ์ฃผ๋ฏผ๋“ฑ๋ก๋ฒˆํ˜ธ์— ๋”ฐ๋ผ์„œ PK ์œ„์น˜ ์กฐ์ •์ด ๋นˆ๋ฒˆํ•˜๊ฒŒ ์ผ์–ด๋‚  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ, jumin ์„ ์œ ๋‹ˆํฌ ํ‚ค๋กœ ์žก๊ณ , PK ๋ฅผ ์ธ์กฐํ‚ค๋กœ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

์ธ์กฐํ‚ค: ์ธ์œ„์ ์œผ๋กœ ๋ถ€์—ฌํ•œ ๋ฒˆํ˜ธ๋กœ ๊ณ ์œ  ์‹๋ณ„์ž Oracle sequence, Mysql auto Increment๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

Non Clustered Index

๋…ผ ํด๋Ÿฌ์Šคํ„ฐ๋“œ ์ธ๋ฑ์Šค๋Š” ํ…Œ์ด๋ธ”์— ์ €์žฅ ๋œ ๋ฌผ๋ฆฌ์ ์ธ ์ˆœ์„œ์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ฆ‰, ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค.

๋…ผ ํด๋Ÿฌ์Šคํ„ฐ ํ˜• ์ธ๋ฑ์Šค๋Š” ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ์™€ ํ•จ๊ป˜ ํ…Œ์ด๋ธ”์— ์ €์žฅ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ณ„๋„์˜ ์žฅ์†Œ์— ์ €์žฅ๋œ๋‹ค.

๋…ผ ํด๋Ÿฌ์Šคํ„ฐ ํ˜•์˜ ์˜ˆ์‹œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค. NonClustered ์ธ๋ฑ์Šค๋Š” ๋ฐ์ดํ„ฐ์˜ ํ–‰์— ๋…๋ฆฝ์ ์ด๋ฉฐ, ์ธ๋ฑ์Šค ํ‚ค ๊ฐ’๊ณผ ๋ฐ์ดํ„ฐ ํ–‰์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๊ฐ€ ์กด์žฌํ•œ๋‹ค.

nonClustered

ํ…Œ์ด๋ธ”์˜ ID ํ‚ค ๊ฐ’๊ณผ ํฌ์ธํ„ฐ์ธ Address๋ฅผ ํ†ตํ•ด ์‹ค์ œ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•œ๋‹ค.

id:4์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ€์ˆ˜ ์ด๋ฆ„์„ ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด 120๋ฒˆ์ง€๋กœ ์ด๋™ํ•˜๊ณ , name์„ ํ™•์ธํ•˜๋ฉด ๋œ๋‹ค. clustered์™€์˜ ์ฐจ์ด๋Š” ์ˆœ์ฐจ์ ์œผ๋กœ index๊ฐ€ ์ •๋ ฌ๋˜์—ˆ์ง€ ์•Š๋‹ค๋Š” ์ ์ด๋‹ค. ๋…ผ ํด๋Ÿฌ์Šคํ„ฐ๋ง ์ธ๋ฑ์Šค๋Š” ํด๋Ÿฌ์Šคํ„ฐ๋ง ์ธ๋ฑ์Šค์— ๋น„ํ•ด์„œ ๊ฒ€์ƒ‰ ์†๋„๋Š” ๋А๋ฆฐ ๋ฐ˜๋ฉด์—, CUD ์†๋„๋Š” ๋น ๋ฅด๋‹ค.

Non-Clustered Index ๊ตฌ์กฐ

nonClustered

  • B-Tree ์˜ ๋ฆฌํ”„ ๋…ธ๋“œ ์ฒ˜๋Ÿผ ๋…ธ๋“œ ์ž์ฒด๊ฐ€ ๋ฐ์ดํ„ฐ๊ฐ€ ์•„๋‹ˆ๊ณ , ๋ฆฌํ”„ ๋…ธ๋“œ์—์„œ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์œ„์น˜ํ•˜๋Š” ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํ˜•ํƒœ.

  • Clustured ๊ตฌ์กฐ์™€๋Š” ๋‹ค๋ฅด๊ฒŒ Leaf Level๊ณผ Data Page๊ฐ€ ๊ตฌ๋ถ„๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Data Page์˜ ๋ฐ์ดํ„ฐ๋Š” ์ •๋ ฌ ๋˜์–ด์žˆ์ง€ ์•Š๋‹ค.

์ •๋ฆฌ

  • Clustered ์ธ๋ฑ์Šค๋Š” ํ…Œ์ด๋ธ”๋‹น ์˜ค์ง ํ•œ๊ฐœ๋งŒ ์กด์žฌํ•œ๋‹ค. ๋ฐ˜๋ฉด์— Non-Clustered ํ˜•์€ ํ…Œ์ด๋ธ” ๋‹น ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Clustered ์ธ๋ฑ์Šค๋Š” ์˜ค์ง ํ…Œ์ด๋ธ”์„ ์ •๋ ฌํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋ณ„๋„์˜ ๊ณต๊ฐ„์„ ํ•„์š”๋กœํ•˜์ง€ ์•Š๋Š”๋‹ค. Non-Clustered ์ธ๋ฑ์Šค๋Š” ์ €์žฅ๋˜๋Š” ๋ณ„๋„์˜ ๊ณต๊ฐ„(์•ฝ 10%)์ด ํ•„์š”ํ•˜๋‹ค.
  • Clustered ์ธ๋ฑ์Šค๋Š” ํ†ต์ƒ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๋Š”๋ฐ ์ถ”๊ฐ€์ ์ธ ์Šคํ…์„ ๊ฑฐ์น˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— Non-Clustered ์ธ๋ฑ์Šค๋ณด๋‹ค ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.
  • Clustered ์ธ๋ฑ์Šค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•  ๋•Œ, ๋ชจ๋“  ํ…Œ์ด๋ธ”์— ์กด์žฌํ•˜๋Š” ๋ฐ์ดํ„ฐ๋“ค์˜ ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•ด์•ผํ•˜๋ฏ€๋กœ ๋งŽ์€ ๋น„์šฉ์ด ๋ฐœ์ƒํ•œ๋‹ค. Non-Clustered๋Š” ๋ณ„๋„์˜ ๊ณต๊ฐ„์— ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ถ”๊ฐ€์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค.

๐Ÿ“Œ์ €์žฅ ๋ฐฉ์‹๋ณ„ ์ธ๋ฑ์Šค

โ˜˜ B-+Tree ์ธ๋ฑ์Šค

B-+Tree Index ๋Š” ๊ฐ€์žฅ ์˜ค๋ž˜์ „์— ๋„์ž…๋œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ฉฐ, ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋Š” ์ธ๋ฑ์Šค ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

ํŠธ๋ฆฌ์˜ ๊ฐ€์žฅ ํฐ ๊ฐ•์ ์€ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ํผํฌ๋จผ์Šค๊ฐ€ ๋ฐ์ดํ„ฐ ์ฆ๊ฐ€๋Ÿ‰์— ๋”ฐ๋ผ์„œ ๊ฒฐ์ฝ” ์„ ํ˜•์ ์œผ๋กœ ์ฆ๊ฐ€ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์ด๋‹ค.

B-Tree ๊ตฌ์กฐ๋ž€?

B-Tree ์˜ B ๋Š” Binary ๊ฐ€ ์•„๋‹Œ Balanced ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

BTree

B-Tree๋Š” ์ด์ง„ํŠธ๋ฆฌ์™€ ๋‹ค๋ฅด๊ฒŒ ํ•˜๋‚˜์˜ ๋…ธ๋“œ์— ๋งŽ์€ ์ˆ˜์˜ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. ์ตœ๋Œ€ M๊ฐœ์˜ ์ž์‹์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” B Tree๋ฅผ M์ฐจ B-Tree๋ผ๊ณ  ํ•œ๋‹ค.

์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ์ฒ˜๋Ÿผ ๊ฐ key๋“ค์˜ ์™ผ์ชฝ ์ž์‹๋“ค์€ ํ•ญ์ƒ key๋ณด๋‹ค ์ž‘์€ ๊ฐ’์„, ์˜ค๋ฅธ์ชฝ ๊ฐ’์€ ํฐ ๊ฐ’์„ ๊ฐ€์ง„๋‹ค.

*key ์‚ฝ์ž…๊ณผ์ • ๐Ÿ“ 1. ๋ถ„ํ• ์ด ์ผ์–ด๋‚˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ

  • ๋ฆฌํ”„ ๋…ธ๋“œ๊ฐ€ ๊ฐ€๋“์ฐจ์ง€ ์•Š์•˜๋‹ค๋ฉด ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ k๋ฅผ ์‚ฝ์ž…ํ•œ๋‹ค.

BํŠธ๋ฆฌ ์‚ฝ์ž…1

๐Ÿ“ 2.. ๋ถ„ํ• ์ด ์ผ์–ด๋‚˜๋Š” ๊ฒฝ์šฐ

  • ๋งŒ์ผ ๋ฆฌํ”„๋…ธ๋“œ์— key ๋…ธ๋“œ๊ฐ€ ๊ฐ€๋“ ์ฐฌ ๊ฒฝ์šฐ, ๋…ธ๋“œ๋ฅผ ๋ถ„ํ• ํ•ด์•ผ ํ•œ๋‹ค.

BํŠธ๋ฆฌ ์‚ฝ์ž…2

BํŠธ๋ฆฌ ์‚ฝ์ž…3

B+Tree ๊ตฌ์กฐ๋ž€?

B-Tree ๊ตฌ์กฐ์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ ๋‹ค๋ฅธ์ ์€ ๋ฆฌํ”„ ๋…ธ๋“œ๊ฐ€ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ ํ˜•ํƒœ๋ฅผ ๋„์–ด ์„ ํ˜• ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์ ์ด๋‹ค.

b+tree1 ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ธ๋ฑ์‹ฑ์„ B+Tree๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

b+tree2

  • ๋ชจ๋“  key, data๊ฐ€ ๋ฆฌํ”„๋…ธ๋“œ์— ๋ชจ์—ฌ์žˆ์Šต๋‹ˆ๋‹ค. BํŠธ๋ฆฌ๋Š” ๋ฆฌํ”„๋…ธ๋“œ๊ฐ€ ์•„๋‹Œ ๊ฐ์ž key๋งˆ๋‹ค data๋ฅผ ๊ฐ€์ง„๋‹ค๋ฉด, B+ํŠธ๋ฆฌ๋Š” ๋ฆฌํ”„ ๋…ธ๋“œ์— ๋ชจ๋“  data๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

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

*key ์‚ฝ์ž…๊ณผ์ • ๐Ÿ“ 1. ๋ถ„ํ• ์ด ์ผ์–ด๋‚˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ

  • B-Tree์™€ ๋™์ผ

๐Ÿ“ 2.. ๋ถ„ํ• ์ด ์ผ์–ด๋‚˜๋Š” ๊ฒฝ์šฐ

btreeInsert

btreeInsert

B+tree์˜ ์žฅ์ 

  1. ๋ฆฌํ”„ ๋…ธ๋“œ๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์•„๋‘์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋” ํ™•๋ณดํ•จ์œผ๋กœ์จ ๋” ๋งŽ์€ key๋“ค์„ ์ˆ˜์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜๋‚˜์˜ ๋…ธ๋“œ์— ๋” ๋งŽ์€ key๋“ค์„ ๋‹ด์„ ์ˆ˜ ์žˆ๊ธฐ์— ํŠธ๋ฆฌ์˜ ๋†’์ด๋Š” ๋” ๋‚ฎ์•„์ง„๋‹ค.(cache hit๋ฅผ ๋†’์ผ ์ˆ˜ ์žˆ์Œ)

  2. ํ’€ ์Šค์บ” ์‹œ, B+tree๋Š” ๋ฆฌํ”„ ๋…ธ๋“œ์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋ชจ๋‘ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•œ ๋ฒˆ์˜ ์„ ํ˜•ํƒ์ƒ‰๋งŒ ํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— B-tree์— ๋น„ํ•ด ๋น ๋ฅด๋‹ค. B-tree์˜ ๊ฒฝ์šฐ์—๋Š” ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.


btree

  • ์ปฌ๋Ÿผ์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ , ์›๋ž˜์˜ ๊ฐ’์„ ์ด์šฉํ•ด ์ธ๋ฑ์‹ฑํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • Root Node, Branch Node(์ค‘๊ฐ„ ๋…ธ๋“œ), Leaf Node๋กœ ๊ตฌ์„ฑ
  • ๊ฐ ๋…ธ๋“œ๋Š” ํŽ˜์ด์ง€๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
    • InnoDB์—์„œ ํŽ˜์ด์ง€๋ž€ ๋””์Šคํฌ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ธฐ๋ณธ ๋‹จ์œ„๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
    • ํŽ˜์ด์ง€ ๋˜๋Š” ๋ธ”๋ก์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
    • ๋””์Šคํฌ์˜ ๋ชจ๋“  ์ฝ๊ธฐ ๋ฐ ์“ฐ๊ธฐ ์ž‘์—…์˜ ์ตœ์†Œ ๋‹จ์œ„๊ฐ€ ๋œ๋‹ค.
    • InnoDB Buffer Pool์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฒ„ํผ๋งํ•˜๋Š” ๊ธฐ๋ณธ ๋‹จ์œ„์ด๊ธฐ๋„ ํ•˜๋‹ค.
    • ์ธ๋ฑ์Šค๋„ ํŽ˜์ด์ง€ ๋‹จ์œ„๋กœ ๊ด€๋ฆฌ๋œ๋‹ค.
    • ๋ชจ๋“  ํŽ˜์ด์ง€์˜ ํฌ๊ธฐ๋Š” 16KB๋กœ ๊ณ ์ •๋˜์–ด ์žˆ๋‹ค.
  • Root Node์™€ Branch Node๋Š” ์ธ๋ฑ์Šค ๋ ˆ์ฝ”๋“œ์™€ ์ž์‹ ๋…ธ๋“œ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ Leaf Node๋Š” ์ธ๋ฑ์Šค ๋ ˆ์ฝ”๋“œ์™€ ๋ ˆ์ฝ”๋“œ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
    • ์ธ๋ฑ์Šค ๋ ˆ์ฝ”๋“œ๋ž€ First Name์ด๋ผ๋Š” ์ปฌ๋Ÿผ์— index๊ฐ€ ๊ฑธ๋ ค์žˆ์„ ๋•Œ ํ•ด๋‹น ์ธ๋ฑ์Šค์— ๋Œ€ํ•œ ๋ ˆ์ฝ”๋“œ ๊ฐ’์„ ์˜๋ฏธํ•œ๋‹ค.

btreeIndex

Leaf Node ์˜ ๋ ˆ์ฝ”๋“œ ์ฃผ์†Œ๋Š” ์‹ค์ œ ํ…Œ์ด๋ธ”์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๋ ˆ์ฝ”๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋œ๋‹ค.

๋ ˆ์ฝ”๋“œ ์ฃผ์†Œ๋Š” DBMS ์˜ ์ข…๋ฅ˜๋‚˜ MySQL ์˜ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง„๋‹ค. Oracle ์€ ๋ฌผ๋ฆฌ์ ์ธ ๋ ˆ์ฝ”๋“œ ์ฃผ์†Œ๊ฐ€ ์ €์žฅ๋˜๊ณ , MyISAM ์€ ๋‚ด๋ถ€์ ์ธ ๋ ˆ์ฝ”๋“œ ์•„์ด๋””๊ฐ€ ์ €์žฅ๋˜๊ณ , InnoDB ๋Š” PK ๊ฐ€ ๋ ˆ์ฝ”๋“œ ์ฃผ์†Œ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

ID   | FISRT_NAME | LAST NAME | BIRTHDATE ...
1001 | Nick       | Clo       | 19901231  ...

๊ทธ๋ฆผ ์ฒ˜๋Ÿผ ์ธ๋ฑ์Šค์˜ ํ‚ค๊ฐ’์€ ์ •๋ ฌ์ด ๋˜์–ด์žˆ๋Š” ๋ฐ˜๋ฉด์— ๋ฐ์ดํ„ฐ ํŒŒ์ผ๋“ค์€ ๋žœ๋คํ•˜๊ฒŒ ์ €์žฅ๋˜์–ด์žˆ๋‹ค.

  • ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œ๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋ฐ์ดํ„ฐ ํŒŒ์ผ๋“ค์— ์ˆœ์ฐจ์ ์œผ๋กœ ์ €์žฅ๋˜๊ฒ ์ง€๋งŒ, ๋ฐ์ดํ„ฐ ์‚ญ์ œ๊ฐ€ ์ผ์–ด๋‚˜๋ฉด DBMS ๋Š” ๋นˆ ๊ณต๊ฐ„์— ๋‹ค์Œ INSERT ๋ฅผ ํ†ตํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ฒŒ ๋” ์žฌํ™œ์šฉํ•˜๋„๋ก ์„ค๊ณ„๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ•ญ์ƒ INSERT ๋œ ์ˆœ์„œ๋กœ ์ €์žฅ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.

์ •๋ฆฌ

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

ํŠธ๋ฆฌ ํƒ์ƒ‰(Tree Traversal)

B-Tree Index ๋ฅผ ์ด์šฉํ•œ ์ธ๋ฑ์Šค ํƒ์ƒ‰ ์ž‘์—…์€ ๋ฃจํŠธ ๋…ธํŠธ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ๋ธŒ๋žœ์น˜ ๋…ธ๋“œ๋ฅผ ๊ฑฐ์ณ ๋ฆฌํ”„ ๋…ธ๋“œ๊นŒ์ง€ ์ด๋™ํ•˜๋ฉด์„œ ๋น„๊ต ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ํŠธ๋ฆฌ ํƒ์ƒ‰(Tree traversal)์ด๋ผ๊ณ  ํ•œ๋‹ค.

B-Tree ๋Š” ์ปฌ๋Ÿผ์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ์›๋ž˜ ๊ฐ’์„ ์ด์šฉํ•˜๋ฏ€๋กœ, ํ•จ์ˆ˜๋‚˜ ์—ฐ์‚ฐ์— ์˜ํ•œ ๊ฒฐ๊ด๊ฐ’์„ ์ด์šฉํ•˜์—ฌ ์ •๋ ฌํ•˜๊ฑฐ๋‚˜ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” B-Tree ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

์˜ˆ์‹œ

exBtree

์ด ํ…Œ์ด๋ธ”์—์„œ ์ธ๋ฑ์Šค ์—†์ด ID = 3์„ Searchํ•œ๋‹ค๋ฉด, ๊ฐ€์žฅ ์œ—์ค„ 2๋ฒˆ ๋ถ€ํ„ฐ ์ˆœ์ฐจ์ ์œผ๋กœ ์ด 8๋ฒˆ์˜ ๋™์ž‘์„ ๊ฐ€์ง„ ํ›„ ๊ฐ’์„ ์ฐพ์„ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

ID ์นผ๋Ÿผ์„ ๊ธฐ์ค€์œผ๋กœ ํ•˜์—ฌ B-Tree ์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“ค์–ด ๋ณด๋ฉด

exBtree2

"ID=3"์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ฐพ๋Š”๋‹ค๋ฉด, ์ด 3๋ฒˆ์˜ ๋™์ž‘์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—๋Š” ์ธ๋ฑ์Šค์™€ ์‹ค์ œ๋ฐ์ดํ„ฐ๊ฐ€ ๋”ฐ๋กœ ๋ถ„๋ฅ˜๋˜์–ด ์ €์žฅ๋œ๋‹ค.

  • 3์„ ์ฐพ๋Š”๋‹ค๊ณ  ๊ฐ€์ •ํ• ๋•Œ, Root Node๋กœ ์ ‘๊ทผํ•˜์—ฌ ์ธ๋ฑ์Šค ๋ ˆ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•œ๋‹ค.

  • ์ธ๋ฑ์Šค ๋ ˆ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜์˜€์„ ๋•Œ 0๋ถ€ํ„ฐ 5๊นŒ์ง€๋Š” ํŽ˜์ด์ง€ 2์— ์ €์žฅ๋˜์–ด์žˆ๋‹ค.

  • ์ด์ œ Branch Node๋กœ ๋‚ด๋ ค๊ฐ€์„œ, ํŽ˜์ด์ง€ 2๋กœ ์ ‘๊ทผํ•œ๋‹ค.

  • ํŽ˜์ด์ง€ 2์—์„œ 3๋ถ€ํ„ฐ 5๊นŒ์ง€๋Š” ํŽ˜์ด์ง€ 5์— ์ €์žฅ๋˜์–ด ์žˆ๋Š”๊ฒƒ์„ ํ™•์ธํ•œ๋‹ค.

  • ์ด์ œ Leaf Node๋กœ ๋‚ด๋ ค๊ฐ€์„œ ํŽ˜์ด์ง€ 5๋กœ ์ ‘๊ทผํ•œ๋‹ค.

  • Leaf Node์—๋Š” ๋‹ค์Œ ํŽ˜์ด์ง€๋กœ ํ–ฅํ•˜๋Š” ๊ธธ์ด ์—†์œผ๋ฉฐ, ๋””์Šคํฌ์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ์ฃผ์†Œ๋ฅผ ์ฐพ์•„๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์ฃผ์†Œ๊ฐ€ ์žˆ๋‹ค.

  • Leaf Node์—์„œ '3'์„ ์ฐพ๊ณ  ๋ ˆ์ฝ”๋“œ ์ฃผ์†Œ x9์„ ํ™œ์šฉํ•˜์—ฌ ๋””์Šคํฌ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ (ID 3, Name D)๋ฅผ ์ฐพ์•„๋‚ธ๋‹ค.

MySQL InnoDB ์—์„œ๋Š” ๋ฐ์ดํ„ฐ ํŒŒ์ผ์— ๋ ˆ์ฝ”๋“œ๋“ค์ด ํด๋Ÿฌ์Šคํ„ฐ๋˜์–ด(Clustered) ๋””์Šคํฌ์— ์ €์žฅ๋˜๋ฏ€๋กœ ๊ธฐ๋ณธ์ ์œผ๋กœ PK ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌ๋˜์–ด ์ €์žฅ๋œ๋‹ค. DBMS ์—์„œ๋Š” ํด๋Ÿฌ์Šคํ„ฐ๋ง ๊ธฐ๋Šฅ์ด ์„ ํƒ์‚ฌํ•ญ์ด์ง€๋งŒ InnoDB ์—์„œ๋Š” ๋””ํดํŠธ๋กœ ํด๋Ÿฌ์Šคํ„ฐ๋ง ํ…Œ์ด๋ธ”์ด ์ƒ์„ฑ๋œ๋‹ค.

MySQL ์—์„œ B-tree ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

MySQL ์—์„œ B-tree ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” B-tree ์ž์ฒด๊ฐ€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋””์Šคํฌ์— ์ €์žฅ๋ ๋•Œ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค๊ณ„ ๋˜์–ด์ง„ ํŠธ๋ฆฌ์ด๋‹ค. ๋””์Šคํฌ์— ์‚ฝ์ž…, ์‚ญ์ œ, ์ฝ๋Š” ์‹œ๊ฐ„์€ RAM ๋ณด๋‹ค ํ›จ์”ฌ ๋А๋ฆฌ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ I/O ๋Š” ๋””์Šคํฌ๋ฅผ ํ†ตํ•ด ๋ฌผ๋ฆฌ์ ์ธ ์ž‘์—…์„ ๊ฑฐ์น˜๊ธฐ ๋•Œ๋ฌธ์— ๋Œ€์šฉ๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ๋•Œ์—๋„ ์„ฑ๋Šฅ์ด ๋„ˆ๋ฌด ๋‚ฎ์•„์ง€์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

์ด์ง„ ํŠธ๋ฆฌ๋Š” ์ตœ์•…์˜ ๊ฒฝ์šฐ O(N) ์„ ๊ฐ€์ง„๋‹ค. ๋ ˆ๋“œ ๋ธ”๋ž™ ํŠธ๋ฆฌ ์ž์ฒด๋Š” ํšจ์œจ์ ์ด์ง€๋งŒ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ์˜ ๊ฒฝ์šฐ ํŠธ๋ฆฌ์˜ ๋†’์ด๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์—†๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํŠธ๋ฆฌ ๋…ธ๋“œ ๋ฃจํŠธ -> ๋ฆฌํ”„ -> ๋ฐ์ดํ„ฐ ์กฐํšŒ ๋ฐฉ์‹์œผ๋กœ ์กฐํšŒ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํŠธ๋ฆฌ์˜ ๋†’์ด๊ฐ€ ๋†’๋‹ค๋ฉด ๊ทธ ๋งŒํผ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋Š”๋ฐ ์‹œ๊ฐ„์ด ๋งŽ์ด ์†Œ๋ชจ๋œ๋‹ค๋Š” ์˜๋ฏธ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค I/O ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ํ•˜๊ธฐ ์œ„ํ•ด์„œ B-tree ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์ฒด์ธ์ง€ ๋ฒ„ํผ๋ง(Change Buffering)

์•„๋ž˜์˜ ๊ทธ๋ฆผ์€ Insert Buffer ์˜ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. B-Tree ์ธ๋ฑ์Šค์— ์ธ๋ฑ์Šค ํ‚ค ์ถ”๊ฐ€์‹œ ๋ฐœ์ƒํ•˜๋Š” ๋™์ž‘ ๊ณผ์ •์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

changeBuffering

  1. ์‚ฌ์šฉ์ž์˜ ์ฟผ๋ฆฌ ์‹คํ–‰
  2. InnoDB Buffer Pool์— ์ƒˆ๋กœ์šด ํ‚ค ๊ฐ’์„ ์ถ”๊ฐ€ํ•ด์•ผํ•  ํŽ˜์ด์ง€(B-Tree Leaf Node)๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด, ์ฆ‰์‹œ ํ‚ค ์ถ”๊ฐ€ ์ž‘์—… ์ฒ˜๋ฆฌ
  3. InnoDB Buffer Pool์— ํŽ˜์ด์ง€๊ฐ€ ์—†๋‹ค๋ฉด Insert Buffer์— ์ถ”๊ฐ€ํ•  ํ‚ค ๊ฐ’๊ณผ ๋ ˆ์ฝ”๋“œ์˜ ์ฃผ์†Œ๋ฅผ ์ž„์‹œ๋กœ ๊ธฐ๋กํ•ด๋‘๊ณ  ์ž‘์—… ์™„๋ฃŒ(์‚ฌ์šฉ์ž์˜ ์ฟผ๋ฆฌ๋Š” ์‹คํ–‰ ์™„๋ฃŒ๋จ)
  4. ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—…์œผ๋กœ ์ธ๋ฑ์Šค ํŽ˜์ด์ง€๋ฅผ ์ฝ์„ ๋•Œ๋งˆ๋‹ค Insert Buffer์— ๋จธ์ง€ํ•ด์•ผํ•  ์ธ๋ฑ์Šค ํ‚ค๊ฐ’์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ ํ›„ ์žˆ์œผ๋ฉด ๋จธ์ง€ (B-Tree์— ์ธ๋ฑ์Šค ํ‚ค์™€ ์ฃผ์†Œ๋ฅผ ์ง€์ •)
  5. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„ ์ž์›์˜ ์—ฌ์œ ๊ฐ€ ์ƒ๊ธฐ๋ฉด MySQL ์„œ๋ฒ„์˜ Insert Buffer Merge Thread๊ฐ€ ์กฐ๊ธˆ์”ฉ Insert Buffer์— ์ž„์‹œ ์ €์žฅ๋œ ์ธ๋ฑ์Šค ํ‚ค์™€ ์ฃผ์†Œ ๊ฐ’์„ ๋จธ์ง€์‹œํ‚จ๋‹ค.

InsertBuffer

MySQL 5.1 ์ดํ•˜ ๋ฒ„์ „์—์„œ๋Š” INSERT ์— ์˜ํ•œ ์ธ๋ฑ์Šค ํ‚ค ์ถ”๊ฐ€ ์ž‘์—… ๋ฐ ๋ฒ„ํผ๋ง ์ง€์—ฐ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ์—ˆ๋Š”๋ฐ MySQL 5.5 ์ด์ƒ ๋ฒ„์ „ ๋ถ€ํ„ฐ INSERT, DELETE ๋“ฑ ์— ์˜ํ•œ ์ž‘์—…๊นŒ์ง€ ์ง€์›ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋ฆ„๋„ ์ธ์„œํŠธ ๋ฒ„ํผ๋ง์—์„œ ์ฒด์ธ์ง€ ๋ฒ„ํผ๋ง์œผ๋กœ ๋ฐ”๋€Œ์—ˆ๋‹ค. MySQL 5.5 ์ด์ƒ ๋ฒ„์ „ ๋ถ€ํ„ฐ๋Š” DBA ๊ฐ€ innodb_change_buffering ์„ค์ • ๊ฐ’์„ ์ด์šฉํ•ด์„œ ํ‚ค ์ถ”๊ฐ€ ์ž‘์—…๊ณผ ์‚ญ์ œ ์ž‘์—… ์ค‘ ์–ด๋А๊ฒƒ์„ ๋จผ์ € ์ง€์—ฐ ์ฒ˜๋ฆฌํ• ์ง€ ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค.

โ˜˜ Hash Index

ํ•ด์‹œ ์ธ๋ฑ์Šค๋Š” InnoDB ์—์„œ ์–ด๋Œ‘ํ‹ฐ๋ธŒ ํ•ด์‹œ ์ธ๋ฑ์Šค(Adaptive Hash Index)๋กœ ์‚ฌ์šฉ๋˜๊ธฐ๋„ ํ•˜๊ณ , ์˜ค๋ผํด์—์„œ๋Š” ์กฐ์ธ์— ์‚ฌ์šฉ๋œ๋‹ค.

ํ•ด์‹œ ์ธ๋ฑ์Šค๋Š” B-Tree ์ธ๋ฑ์Šค์™€ ๋‹ฌ๋ฆฌ ๋ฒ„์ผ“์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

hashindex

  • ์‚ฌ์šฉ์ž๊ฐ€ ๊ฒ€์ƒ‰ํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฐ’์„ ์ฃผ๋ฉด ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ๊ฑฐ์ณ์„œ ์ฐพ๊ณ ์ž ํ•˜๋Š” ํ‚ค๊ฐ’์ด ํฌํ•จ๋œ ๋ฒ„์ผ“(Bucket)์„ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ๋ฒ„์ผ“ ํ•˜๋‚˜๋งŒ ์ฝ์–ด์„œ ์‹ค์ œ ๋ ˆ์ฝ”๋“œ๊ฐ€ ์ €์žฅ๋œ ์œ„์น˜๋ฅผ ๋ฐ”๋กœ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

    • ํŠธ๋ฆฌ ๋‚ด์—์„œ ์—ฌ๋Ÿฌ ๋…ธ๋“œ๋ฅผ ์ฝ์–ด์•ผ ํ•˜์ง€๋งŒ ๋ ˆ์ฝ”๋“œ์˜ ์ฃผ์†Œ๋ฅผ ์•Œ์•„ ๋‚ผ ์ˆ˜ ์žˆ๋Š” B-Tree ๋ณด๋‹ค ๋น ๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ๋„์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Hash index ๋Š” ์›๋ž˜์˜ ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ํ•ด์‹œ ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ๋งŒ์„ ์ €์žฅํ•˜๊ฒŒ ๋จ์— ๋”ฐ๋ผ ํ‚ค ์ปฌ๋Ÿผ ๊ฐ’์€ 4~8๋ฐ”์ดํŠธ ์ •๋„๋กœ ์ž‘์€ ๊ธธ์ด๋กœ ์ค„์–ด ๋“ค๊ฒŒ ๋˜๊ณ  B-Tree ์ธ๋ฑ์Šค์— ๋น„ํ•ด ์ƒ๋‹นํžˆ ์ž‘์€ ํฌ๊ธฐ ์ด๋‹ค.

  • ์ž…๋ ฅํ•œ ๊ฐ’์ด ๋‹ค๋ฅด์ง€๋งŒ ํ•ด์‹œ๋œ ๊ฐ’์ด ๊ฐ™์„ ๊ฒฝ์šฐ ํ•ด์‹œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.ํ•ด์‹œ ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ ๊ฐ’์˜ ๋ฒ”์œ„๊ฐ€ ์ข์œผ๋ฉด ํ•„์š”ํ•œ ๋ฒ„์ผ“์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ ์–ด์ง€๊ฒŒ ๋˜๋ฉด์„œ ์ถฉ๋Œํ• ์ˆ˜ ์žˆ๋Š” ํ™•์œจ์ด ๋†’๊ฒŒ ๋œ๋‹ค. Hash index ์—์„œ ์ถฉ๋Œ์ด ๋งŽ์ด ๋ฐœ์ƒ ๋  ์ˆ˜๋ก ๊ฒ€์ƒ‰ ํšจ์œจ์ด ๋–จ์–ด์ง€๊ฒŒ ๋œ๋‹ค.

์™œ index ์ƒ์„ฑ ์‹œ b-tree๋ฅผ ์‚ฌ์šฉํ•˜๋Š”์ง€? hash table์ด ๋” ํšจ์œจ์ ์ด์ง€ ์•Š์€์ง€?

  • Hash index ๋Š” ๋™๋“ฑ(equal =) ๋น„๊ต ๊ฒ€์ƒ‰์‹œ ์‚ฌ์šฉ ๋ฐ ์ตœ์ ํ™” ๋˜์–ด ์žˆ์œผ๋ฉฐ ๋ฒ”์œ„๋‚˜ FullText Search ๋‚˜ ์ •๋ ฌ๋œ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ชฉ์ ์œผ๋กœ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค.
  • SELECT ์งˆ์˜ ์กฐ๊ฑด์—๋Š” ๋ถ€๋“ฑํ˜ธ ์—ฐ์‚ฐ(<>)๋„ ํฌํ•จ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ถ€๋“ฑํ˜ธ ์—ฐ์‚ฐ ์‚ฌ์šฉ ์‹œ ๋ฌธ์ œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ ˆ์ฝ”๋“œ ๋‹จ์œ„ ์ž ๊ธˆ

๊ฐœ๋ณ„ ์ธ๋ฑ์Šค ๋ ˆ์ฝ”๋“œ์— S-Lock ํ˜น์€ X-Lock์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

ํ…Œ์ด๋ธ”์— ์ธ๋ฑ์Šค๊ฐ€ ์ƒ์„ฑ๋˜์–ด ์žˆ์ง€ ์•Š๋”๋ผ๋„ ํ…Œ์ด๋ธ” ์ƒ์„ฑ์‹œ์— ํ•จ๊ป˜ ์ƒ์„ฑ๋˜๋Š” default Clustered Index์˜ ๋ ˆ์ฝ”๋“œ์— Lock์„ ๊ฑธ์–ด, ํ•ญ์ƒ ์ธ๋ฑ์Šค ๋ ˆ์ฝ”๋“œ์— Lock์„ ์„ค์ •ํ•œ๋‹ค.

SELECT * FROM a_table WHERE pk=10 LOCK IN SHARE MODE
# pk=10 ํ•˜๋‚˜์˜ ๋ ˆ์ฝ”๋“œ์— S-Lock์ด ๊ฑธ๋ฆผ
UPDATE a_table SET name="๊น€์ง€์›" WHERE id="ji"
# id="ji" ํ•˜๋‚˜์˜ ํ—ค์ฝ”๋“œ์— X-Lock์ด ๊ฑธ๋ฆผ
  • InnoDB Storage Engine ์€ ๋ ˆ์ฝ”๋“œ ์ž ๊ธˆ์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ์ธ๋ฑ์Šค๋ฅผ ์ž ๊ทผ ํ›„ ํ•ด๋‹น ํ…Œ์ด๋ธ” ๋ ˆ์ฝ”๋“œ๋“ค์„ ์ž ๊ทธ๋Š” ๋ฐฉ์‹์ธ ๋ ˆ์ฝ”๋“œ ๋‹จ์œ„ ์ž ๊ธˆ ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค.
  • ๋”ฐ๋ผ์„œ, UPDATE ๋‚˜ DELETE ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ํ…Œ์ด๋ธ”์— ์ ์ ˆํžˆ ์‚ฌ์šฉํ•  ์ธ๋ฑ์Šค๊ฐ€ ์—†๋‹ค๋ฉด ๋งŽ์€ ๋ ˆ์ฝ”๋“œ๋“ค์ด ์ž ๊ธฐ๊ฒŒ ๋œ๋‹ค.
    • ๊ฒฝ์šฐ์— ๋”ฐ๋ผ์„œ ํ…Œ์ด๋ธ” ํ’€ ์Šค์บ”์„ ํ†ตํ•ด ๋ชจ๋“  PK ์ธ๋ฑ์Šค๊ฐ€ ์ž ๊ธธ ์ˆ˜ ์žˆ๋‹ค.
  • Mutex Lock ์ด ๊ณผ๋„ํ•˜๊ฒŒ ์žกํžˆ๋ฉด ์ ์€ ๋ฐ์ดํ„ฐ ์…‹์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  DB ์ž์› ์‚ฌ์šฉ ํšจ์œจ์ด ๋–จ์–ด์ง€๊ฒŒ๋œ๋‹ค.
    • ์ด๋Ÿฌํ•œ ํ˜„์ƒ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ InnoDB ์—์„œ๋Š” Adaptive Hash Index ๋ผ๋Š” ๊ธฐ๋Šฅ์ด ์žˆ๋‹ค.

์˜ˆ์‹œ

User ํ…Œ์ด๋ธ”์˜ ์ด ๋ ˆ์ฝ”๋“œ ๊ฐœ์ˆ˜๋Š” 5000๊ฐœ
์„ฑ์”จ ์ปฌ๋Ÿผ์ด 'ํ™'์ธ ๋ ˆ์ฝ”๋“œ๋Š” 300๊ฐœ
์„ฑ์”จ ์ปฌ๋Ÿผ์ด 'ํ™'์ด๊ณ , ์ด๋ฆ„ ์ปฌ๋Ÿผ์ด '๊ธธ๋™'์ธ ๋ ˆ์ฝ”๋“œ๋Š” 1๊ฐœ
์„ฑ์”จ ์ปฌ๋Ÿผ์—๋Š” idx_์„ฑ์”จ ์ธ๋ฑ์Šค๊ฐ€ ๊ฑธ๋ ค์žˆ์Œ

UPDATE USER SET ์ทจ๋ฏธ="์ถ•๊ตฌ" WHERE ์„ฑ์”จ = "ํ™" AND ์ด๋ฆ„ = "๊ธธ๋™"

idx_์„ฑ์”จ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ๋ ˆ์ฝ”๋“œ ์ž์ฒด๋ฅผ ์ž ๊ทธ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์‚ฌ์šฉ๋œ ์ธ๋ฑ์Šค ๋ ˆ์ฝ”๋“œ๋ฅผ ์ž ๊ทธ๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ์ด 'ํ™'์ธ ๋ ˆ์ฝ”๋“œ๋“ค์ด ์ž ๊ธฐ๊ฒŒ ๋œ๋‹ค. - ์ด๊ฒƒ์„ ์ธ๋ฑ์Šค ๋ ˆ์ธ์ง€ ์Šค์บ”์ด๋ผ๊ณ  ํ•œ๋‹ค. ๋งŒ์•ฝ์— idx_์„ฑ์”จ ์ธ๋ฑ์Šค๊ฐ€ ์—†์—ˆ๋‹ค๊ณ  ํ•˜๋ฉด, ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋œ PK๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ ์ด๋•Œ ํ…Œ์ด๋ธ” ํ’€ ์Šค์บ”์„ ํ•˜๊ฒŒ ๋˜์–ด ๊ฒ€์ƒ‰์— ์‚ฌ์šฉ๋œ ๋ชจ๋“  PK ์ธ๋ฑ์Šค๊ฐ€ ์ž ๊ธฐ๊ฒŒ ๋œ๋‹ค. ๋งŒ์•ฝ ์„ฑ์”จ์™€ ์ด๋ฆ„์— ๋Œ€ํ•œ ๋ณตํ•ฉ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ–ˆ๋”๋ผ๋ฉด ์„ฑ๊ณผ ์ด๋ฆ„์ด ์ผ์น˜ํ•˜๋Š” 1๊ฐœ์˜ ๋ ˆ์ฝ”๋“œ๋งŒ ์ž ๊ธฐ๊ฒŒ ๋˜์—ˆ์„ ๊ฒƒ์ด๋‹ค.

์ด๋ ‡๊ฒŒ ์ธ๋ฑ์Šค๋ฅผ ์–ด๋–ป๊ฒŒ ์„ค์ •ํ•˜๋Š”์ง€์— ๋”ฐ๋ผ ๋ ˆ์ฝ”๋“œ์˜ ์ž ๊ธˆ ๋ฒ”์œ„๊ฐ€ ๋‹ฌ๋ผ์ง€๊ฒŒ ๋˜๋‹ˆ innoDB์—์„œ๋Š” ์ธ๋ฑ์Šค๋ฅผ ์‹ ์ค‘ํžˆ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

InnoDB Adaptive Hash Index

InnoDB ๋Š” B-Tree ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ๋ฝ์œผ๋กœ ์ธํ•œ ์ž์› ์‚ฌ์šฉ ํšจ์œจ์ด ๋–จ์–ด์ง€๋Š” ํ˜„์ƒ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ InnoDB Adative Hash Index ๊ธฐ๋Šฅ์„ ๋„์ž…ํ•œ๋‹ค.

adativehashindex

  • InnoDB Adaptive Hash Index๋Š” Hash Index ๋กœ ๊ตฌํ˜„๋˜์–ด์žˆ์œผ๋ฉฐ, Adaptive ๋ผ๋Š” ๋‹จ์–ด์—์„œ ์˜ˆ์ƒํ•  ์ˆ˜ ์žˆ๋“ฏ์ด, ๋ชจ๋“  ๊ฐ’๋“ค์ด ํ•ด์‹œ๋กœ ์ƒ์„ฑ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ ๊ฐ’๋งŒ ๋‚ด๋ถ€์ ์œผ๋กœ ํŒ๋‹จํ•˜์—ฌ ์ƒํ™ฉ์— ๋งž๊ฒŒ ํ•ด์‹œ ๊ฐ’์„ ์ƒ์„ฑํ•œ๋‹ค.

  • Adative Hash Index์— ํ• ๋‹น๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋Š” ์ „์ฒด Innodb_Buffer_Pool_Size ์˜ 1/64 ๋งŒํผ์œผ๋กœ ์ดˆ๊ธฐํ™”๋œ๋‹ค.

  • ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์ž์›์„ ํ•ด์‹œ๋ฅผ ํ†ตํ•ด์„œ ์ง์ ‘ ์ ‘๊ทผํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋‚ด๋ถ€์ ์ธ ๋ฝ(์ด๋ฅผํ…Œ๋ฉด Mutex)์œผ๋กœ ์ธํ•œ ์ง€์—ฐ์ด ์ค„์–ด๋“ ๋‹ค.

  • ๊ฒŒ๋‹ค๊ฐ€ B-Tree์˜ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๋น„์šฉ(O(LogN))์— ๋น„ํ•ด, ํ•ด์‹œ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๋น„์šฉ์ธ O(1)์œผ๋กœ ๊ต‰์žฅํžˆ ๋น ๋ฅธ ์†๋„๋กœ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

  • ๋‹จ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์ž์› ๋งŒ์„ ํ•ด์‹œ๋กœ ์ƒ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์—, SELECT๋กœ ์ธํ•˜์—ฌ ๋ฐ˜๋“œ์‹œ ํ•ด๋‹น ์ž์›์„ ํ–ฅํ•œ ์ง์ ‘์ ์ธ ํ•ด์‹œ ๊ฐ’์ด ๋งŒ๋“ค์–ด์ง€์ง€ ์•Š๋Š”๋‹ค.

์ด ๊ธฐ๋Šฅ์€ ๊ป๋‹ค ์ผฐ๋‹ค ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ผœ๊ธฐ

  • set global innodb_adaptive_hash_index = 1; ๋„๊ธฐ
  • set global innodb_adaptive_hash_index = 0; ํ†ต๊ณ„ ์ •๋ณด ํ™•์ธํ•˜๊ธฐ
  • show global status like 'Innodb_adaptive_hash%';

Adaptive Hash Index๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ CPU๊ฐ€ 100% ์˜€์œผ๋‚˜, Adaptive Hash Index๋ฅผ ์‚ฌ์šฉํ•œ ์ดํ›„์—๋Š” 60% ์ •๋„๋กœ ์‚ฌ์šฉ๋ฅ ์ด ๋‚ด๋ ค๊ฐ”๋‹ค.

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

๋นˆ๋ฒˆํ•œ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ์ด ๋งŽ์€ ํ™˜๊ฒฝ์—์„œ๋Š” ๋Œ€๋‹จํžˆ ํšจ์œจ์ด ์ข‹์€ ๊ฒฐ๊ณผ๋ฅผ ๋‚˜ํƒ€๋‚ด์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ์ฃผ์˜๋ฅผ ํ•ด์•ผํ•  ์ ์€ ์˜ค๋ž˜๋œ ํ…Œ์ด๋ธ”์ธ ๊ฒฝ์šฐ์—๋„ ํ•ด์‹œ๊ฐ€ ์—ฌ์ „ํžˆ ๋ฉ”๋ชจ๋ฆฌ์— ๋‚จ์•„์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด์— ๋Œ€ํ•œ ์ œ์–ด๋Š” ๋ถˆ๊ฐ€ํ•˜๋‹ค.

๊ฒฐ๋ก 

InnoDB Adaptive Hash Index๋Š” B-Tree์˜ ํ•œ๊ณ„๋ฅผ ๋ณด์™„ํ•  ์ˆ˜ ์žˆ๋Š” ์ข‹์€ ๊ธฐ๋Šฅ์ด๋‹ค.

ํŠนํžˆ ๋‹จ์ผ ๋žœ๋ค ํ‚ค ์ ‘๊ทผ์ด ๋นˆ๋„์žˆ๊ฒŒ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ๋ผ๋ฉด, B-Tree ๋ฅผ ํ†ตํ•˜์ง€ ์•Š๊ณ  ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผ/์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ธฐ์— ์ข‹์€ ํผํฌ๋จผ์Šค๋ฅผ ๋ณด์ธ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜, ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ํŒ๋‹จํ•˜์—ฌ ํ•ด์‹œ ํ‚ค๋กœ ๋งŒ๋“ค๊ธฐ ๋•Œ๋ฌธ์— ์ œ์–ด๊ฐ€ ์–ด๋ ค์šฐ๋ฉฐ, ์ˆ˜ ๊ฐœ์›” ๋™์•ˆ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋˜ ํ…Œ์ด๋ธ”์ผ์ง€๋ผ๋„ ๊ธฐ์กด ํ•ด์‹œ ์ž๋ฃŒ ๊ตฌ์กฐ์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚จ์•„ ์žˆ๊ฒŒ ๋˜๋ฉด, ํ…Œ์ด๋ธ” Drop ์‹œ ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค. ํ•ด์‹œ ์ธ๋ฑ์Šค์— ์˜์กดํ•˜์—ฌ ํŠธ๋ž˜ํ”ฝ์ด ์ฃผ๋กœ ์ฒ˜๋ฆฌ๋˜๋Š” ์„œ๋น„์Šค์ธ ๊ฒฝ์šฐ ์ด๋Ÿฐ ์ ์„ ์—ผ๋‘ํ•ด ๋‘๊ณ  ์‚ฌ์šฉ์„ ํ•œ๋‹ค.


๐Ÿ“Œ Multi Column Index

multicolumnindex

๋‹ค์ค‘ ์ปฌ๋Ÿผ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๋ฆฌํ”„ ๋…ธ๋“œ์—์„œ ์ธ๋ฑ์Šค ๋ ˆ์ฝ”๋“œ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ •๋ ฌ๋ ๊นŒ?

-- ์ธ๋ฑ์Šค ์ƒ์„ฑ
create index member_info_idx on member(groupno, lastname, firstname, age);
  • ๋‘๋ฒˆ์งธ ์ปฌ๋Ÿผ์€ ์ฒซ๋ฒˆ์งธ ์ปฌ๋Ÿผ ์ •๋ ฌ์— ์˜์กดํ•˜๊ณ , ์„ธ๋ฒˆ์งธ ์ปฌ๋Ÿผ์€ ๋‘๋ฒˆ์งธ ์ปฌ๋Ÿผ์— ์˜์กดํ•œ๋‹ค.
  • JiHye์˜ Age๊ฐ€ ๋” ๋น ๋ฅด๋”๋ผ๋„(์ˆซ์ž ๊ฐ’์ด ๋‚ฎ๋‹ค๋Š” ์˜๋ฏธ) ์ฒซ ๋ฒˆ์งธ ์ปฌ๋Ÿผ์˜ ์ •๋ ฌ ์ˆœ์„œ๊ฐ€ ์šด์„ ์ˆœ์œ„๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋งจ ๋งˆ์ง€๋ง‰์— ์œ„์น˜ํ•˜๊ฒŒ ๋œ๋‹ค.

๋”ฐ๋ผ์„œ, ๋‹ค์ค‘ ์ปฌ๋Ÿผ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ• ๋•Œ ์ปฌ๋Ÿผ์˜ ์œ„์น˜(์ˆœ์„œ)๊ฐ€ ์ƒ๋‹นํžˆ ์ค‘์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹ ์ค‘ํ•˜๊ฒŒ ๊ฒฐ์ •ํ•ด์•ผ ํ•œ๋‹ค.

์ธ๋ฑ์Šค ์ •๋ ฌ ๋ฐ ์Šค์บ” ๋ฐฉํ–ฅ ์ธ๋ฑ์Šค ํ‚ค๊ฐ’์€ ํ•ญ์ƒ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ธ๋ฑ์Šค๋ฅผ ์•„๋ž˜ ๋ถ€ํ„ฐ ์ฝ์„์ง€ ์œ„์—์„œ ๋ถ€ํ„ฐ ์ฝ์„์ง€ ์ •ํ•˜๋Š” ๊ฒƒ์€, ์ฟผ๋ฆฌ์— ๋”ฐ๋ผ์„œ ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ์‹คํ–‰ ๊ณ„ํš์„ ๋งŒ๋“ค์–ด ๊ทธ ๊ณ„ํš์— ๋”ฐ๋ผ ๊ฒฐ์ •๋œ๋‹ค.

๐Ÿ“ŒUnique vs Non-Unique

๋ฐ์ดํ„ฐ์˜ ์ค‘๋ณต ํ—ˆ์šฉ ์—ฌ๋ถ€๋กœ ๊ตฌ๋ถ„ํ•˜๋ฉด ์œ ๋‹ˆํฌ ์ธ๋ฑ์Šค์™€ ์œ ๋‹ˆํฌ ํ•˜์ง€ ์•Š์€ ์ธ๋ฑ์Šค๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

์ธ๋ฑ์Šค๊ฐ€ ์œ ๋‹ˆํฌํ•œ์ง€ ์•„๋‹Œ์ง€๋Š” DBMS ์˜ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•˜๋Š” ์˜ตํ‹ฐ๋งˆ์ด์ €ํ•œํ…Œ ์ค‘์š”ํ•˜๋‹ค.

๊ฐ’์ด ์œ ๋‹ˆํฌ ํ•˜๋ฉด ์œ ๋‹ˆํฌ ์ธ๋ฑ์Šค์— ๋Œ€ํ•ด ๋™๋“ฑ ์กฐ๊ฑด(Equal, =)์œผ๋กœ ๊ฒ€์ƒ‰ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜ตํ‹ฐ๋งˆ์ด์ €์—๊ฒŒ ์•Œ๋ ค์ค„ ์ˆ˜ ์žˆ๋‹ค.

๋™๋“ฑ ์กฐ๊ฑด(Equal, =)์œผ๋กœ ๊ฒ€์ƒ‰ํ•œ๋‹ค๋Š” ๊ฒƒ : ํ•ญ์ƒ 1๊ฑด์˜ ๋ ˆ์ฝ”๋“œ๋งŒ ์ฐพ์œผ๋ฉด ๋” ์ด์ƒ ์ฐพ์ง€ ์•Š์•„๋„ ๋œ๋‹ค๋Š” ์˜๋ฏธ

์œ ๋‹ˆํฌ ์ธ๋ฑ์Šค vs ์„ธ์ปจ๋”๋ฆฌ ์ธ๋ฑ์Šค

  • ์œ ๋‹ˆํฌํ•œ ์„ธ์ปจ๋”๋ฆฌ ์ธ๋ฑ์Šค๋Š” ๊ฒฐ๊ตญ ์œ ๋‹ˆํฌ ์ธ๋ฑ์Šค๊ฐ€ ๋œ๋‹ค.
  • ์œ ๋‹ˆํฌ ์ธ๋ฑ์Šค์™€ ์œ ๋‹ˆํฌํ•˜์ง€ ์•Š์€ ์„ธ์ปจ๋”๋ฆฌ ์ธ๋ฑ์Šค๋Š” ๊ตฌ์กฐ ์ƒ ์ฐจ์ด๊ฐ€ ์—†๋‹ค.

์ธ๋ฑ์Šค ์“ฐ๊ธฐ

  • ์œ ๋‹ˆํฌ ์ธ๋ฑ์Šค์˜ ํ‚ค ๊ฐ’์„ ์“ธ ๋•Œ๋Š” ์ค‘๋ณต๋œ ๊ฐ’์ด ์žˆ๋Š”์ง€ ์—†๋Š”์ง€ ์ฒดํฌํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•˜๋‹ค.
    • MySQL์—์„œ๋Š” ์ค‘๋ณต๋œ ๊ฐ’์„ ์ฒดํฌํ•  ๋•Œ๋Š” ์ฝ๊ธฐ ์ž ๊ธˆ์„ ์‚ฌ์šฉํ•˜๊ณ , ๊ฐ’ ์“ฐ๊ธฐ๋ฅผ ํ•  ๋•Œ๋Š” ์“ฐ๊ธฐ ์ž ๊ธˆ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ๋“œ๋ฝ์ด ๋นˆ๋ฒˆํžˆ ๋ฐœ์ƒํ•œ๋‹ค.
  • ๋”ฐ๋ผ์„œ ์„ธ์ปจ๋”๋ฆฌ ์ธ๋ฑ์Šค๋ณด๋‹ค ์œ ๋‹ˆํฌ ์ธ๋ฑ์Šค๊ฐ€ ์“ฐ๊ธฐ ์ž‘์—…์—์„œ๋Š” ์„ฑ๋Šฅ ์ƒ ๋А๋ฆฌ๋‹ค.

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

Hint

Hint ๋ž€, SQL ๋ฌธ์žฅ์— ํŠน๋ณ„ํ•œ ํ‚ค์›Œ๋“œ๋ฅผ ์ง€์ •ํ•˜์—ฌ ์˜ตํ‹ฐ๋งˆ์ด์ €์—๊ฒŒ ์–ด๋–ป๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š” ๊ฒƒ์ด ํšจ๊ณผ์ ์ธ์ง€ ์•Œ๋ ค์ฃผ๋Š” ํ‚ค์›Œ๋“œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

MySQL ์—์„œ๋Š” ์‹ค์ œ๋กœ ์ฟผ๋ฆฌ์˜ ์„ฑ๋Šฅ ๊ฐœ์„ ์„ ์œ„ํ•ด ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์ด 4 ~ 5๊ฐœ ์ •๋„๋ผ๊ณ  ํ•œ๋‹ค. Hint ๋Š” ์˜ตํ‹ฐ๋งˆ์ด์ €์—๊ฒŒ ์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค. ๋”ฐ๋ผ์„œ Hint ๋ฅผ ์ž˜๋ชป ์‚ฌ์šฉํ•˜๋ฉด ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ SQL ์„ ์•Œ์•„์„œ ์ตœ์ ํ™” ํ•ด์ฃผ๋Š” ๊ฒƒ์„ ๋ณธ์ธ์ด ๋ง์น˜๋Š” ์…ˆ์ด ๋  ์ˆ˜๋„ ์žˆ๋‹ค.

์‚ฌ์šฉ ๋ฐฉ๋ฒ•

  • SQL ๋ฌธ์žฅ์˜ ์ผ๋ถ€๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹
    • SELECT * FROM member USE INDEX (PRIMARY) WHERE id = 1001;
  • ์ฃผ์„ ํ‘œ๊ธฐ ๋ฐฉ์‹
    • SELECT * FROM member /*! USE INDEX (PRIMARY) */ WHERE id = 1001;

Oracle ๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ DBMS ๋“ค์€ Hint ๋ฅผ ์ฃผ์„์œผ๋กœ ํ•ด์„ํ•˜๋Š”๋ฐ, MySQL ์€ SQL ์˜ ์ผ๋ถ€๋กœ ํ•ด์„ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž˜ ๋ชป ์‚ฌ์šฉํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

์ถœ์ฒ˜

buffer pool

clusteredIndex

10๋ถ„ ํ…Œ์ฝ”ํ†ก-์˜ฌ๋ผํ”„์˜ Clustered vs Non-clustered Index

10๋ถ„ ๋ฐ์ฝ”ํ†ก-์•ˆ๋Œ์˜ Index

btree

b+tree

btree

adaptive hash index

๋ฉด์ ‘ ์˜ˆ์ƒ ์งˆ๋ฌธ

์ธ๋ฑ์Šค๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?

์ธ๋ฑ์Šค์˜ ์žฅ์ ๊ณผ ๋‹จ์ ์—๋Š” ๋ฌด์—‡์ด ์žˆ๋‚˜์š”?

์ธ๋ฑ์Šค์˜ ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ์–ด๋–ค ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋‚˜์š”?

์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์„ ๊ฒฝ์šฐ์™€ ๋‚˜์  ๊ฒฝ์šฐ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”

ํด๋Ÿฌ์Šคํ„ฐ๋“œ ์ธ๋ฑ์Šค/๋„Œํด๋Ÿฌ์Šคํ„ฐ๋“œ ์ธ๋ฑ์Šค๋ž€ ๋ฌด์—‡์ด๊ณ  ์žฅ์ ์€ ๋ฌด์—‡์ธ๊ฐ€?

์ธ๋ฑ์Šค ๋ ˆ์ธ์ง€ ์Šค์บ”๊ณผ ์ธ๋ฑ์Šค ํ’€ ์Šค์บ”์˜ ์ฐจ์ด๋Š” ๋ฌด์—‡์ด์žˆ๋‚˜์š”?