Skip to content

Latest commit

ย 

History

History
170 lines (130 loc) ยท 13.4 KB

File metadata and controls

170 lines (130 loc) ยท 13.4 KB

Inde & Hint

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

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

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

B-Tree Index, Hash Index

Hint

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

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

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

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

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

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

์ธ๋ฑ์Šค

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

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

Index์˜ ์›๋ฆฌ

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

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

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

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

Index์˜ ์žฅ์ 

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

Index์˜ ๋‹จ์ 

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

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

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

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

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

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

Index์˜ ๋ถ„๋ฅ˜

์—ญํ• ๋ณ„

Clustered Index

  • ํ…Œ์ด๋ธ”์˜ ๊ธฐ๋ณธํ‚ค(PK)์— ๋Œ€ํ•ด ์ ์šฉ๋˜๋Š” ์ธ๋ฑ์Šค
    • ํ…Œ์ด๋ธ” ๋‹น ์˜ค์ง ํ•œ๊ฐœ๋งŒ ์กด์žฌ
  • ํ…Œ์ด๋ธ”์— ์‚ฝ์ž…๋˜๋Š” ์ˆœ์„œ์— ์ƒ๊ด€์—†์ด Index๋กœ ์ƒ์„ฑ๋˜์–ด ์žˆ๋Š” ์ปฌ๋Ÿผ์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ๋˜์–ด ์‚ฝ์ž…๋œ๋‹ค.
    • ์ค‘๊ฐ„์— ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฝ์ž…๋œ๋‹ค๋ฉด ์ดํ›„์˜ ๋ชจ๋“  ์ปฌ๋Ÿผ์„ ํ•œ ์นธ์”ฉ ์ด๋™์‹œ์ผœ์ค˜์•ผํ•œ๋‹ค. (index๊ฐ€ ๊ตฐ์ง‘ํ™” ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. )
  • ํ”„๋ผ์ด๋จธ๋ฆฌ ํ‚ค ๊ฐ’์— ์˜ํ•ด ๋ ˆ์ฝ”๋“œ์˜ ์ €์žฅ์œ„์น˜๊ฐ€ ๊ฒฐ์ •๋˜๋ฉฐ ํ”„๋ผ์ด๋จธ๋ฆฌ ํ‚ค ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๋ฉด ๊ทธ ๋ ˆ์ฝ”๋“œ์˜ ๋ฌผ๋ฆฌ์ ์ธ ์ €์žฅ ์œ„์น˜ ๋˜ํ•œ ๋ณ€๊ฒฝ๋˜์–ด์•ผ ํ•œ๋‹ค.
  • Clustered Index ๊ตฌ์กฐ
    • Leaf Level๊ณผ Data Page๊ฐ€ ๋™์ผํ•œ ๊ตฌ์กฐ๋ฅผ ๊ฐ–๋Š”๋‹ค. (๋ณ„๋„์˜ ๊ณต๊ฐ„์„ ํ•„์š”๋กœ ํ•˜์ง€ ์•Š๋Š”๋‹ค. )
    • Data Page์˜ ๋ฐ์ดํ„ฐ๋“ค์ด ์ˆœ์ฐจ์ ์œผ๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ๋‹ค.
    • Clustered Index๋Š” ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ์–ด ๊ฒ€์ƒ‰ ์†๋„๊ฐ€ Non-Clustered Index๋ณด๋‹ค ๋” ๋น ๋ฅด๋‹ค.
    • ๋ฐ์ดํ„ฐ์˜ ์ž…๋ ฅ/์ˆ˜์ •/์‚ญ์ œ ์‹œ์—๋„ ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ์ž…๋ ฅ/์ˆ˜์ •/์‚ญ์ œ ์†๋„๋Š” ๋” ๋А๋ฆฌ๋‹ค.

Non-Clustered Index

  • ํ…Œ์ด๋ธ”์˜ ๊ธฐ๋ณธ ํ‚ค ์™ธ์— ๋‹ค๋ฅธ ์ปฌ๋Ÿผ์— ์ ์šฉ๋œ ์ธ๋ฑ์Šค
    • ํ…Œ์ด๋ธ” ๋‹น ์—ฌ๋Ÿฌ๊ฐœ์ด ์ธ๋ฑ์Šค ์ƒ์„ฑ ๊ฐ€๋Šฅ
  • ๋…ผ ํด๋Ÿฌ์Šคํ„ฐ๋“œ ์ธ๋ฑ์Šค๋Š” ํ…Œ์ด๋ธ”์— ์ €์žฅ ๋œ ๋ฌผ๋ฆฌ์ ์ธ ์ˆœ์„œ์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ฆ‰, ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค.
  • ๋…ผ ํด๋Ÿฌ์Šคํ„ฐ ํ˜• ์ธ๋ฑ์Šค๋Š” ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ์™€ ํ•จ๊ป˜ ํ…Œ์ด๋ธ”์— ์ €์žฅ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ณ„๋„์˜ ์žฅ์†Œ์— ์ €์žฅ๋œ๋‹ค.
    • ํ…Œ์ด๋ธ”์˜ ID ํ‚ค ๊ฐ’๊ณผ ํฌ์ธํ„ฐ์ธ Address๋ฅผ ํ†ตํ•ด ์‹ค์ œ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•œ๋‹ค.
  • Non-Clustered Index ๊ตฌ์กฐ
    • B-Tree ์˜ ๋ฆฌํ”„ ๋…ธ๋“œ ์ฒ˜๋Ÿผ ๋…ธ๋“œ ์ž์ฒด๊ฐ€ ๋ฐ์ดํ„ฐ๊ฐ€ ์•„๋‹ˆ๊ณ , ๋ฆฌํ”„ ๋…ธ๋“œ์—์„œ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์œ„์น˜ํ•˜๋Š” ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํ˜•ํƒœ.
    • Clustured ๊ตฌ์กฐ์™€๋Š” ๋‹ค๋ฅด๊ฒŒ Leaf Level๊ณผ Data Page๊ฐ€ ๊ตฌ๋ถ„๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Data Page์˜ ๋ฐ์ดํ„ฐ๋Š” ์ •๋ ฌ ๋˜์–ด์žˆ์ง€ ์•Š๋‹ค.

์ €์žฅ ๋ฐฉ์‹๋ณ„

B -+ Tree Index

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

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

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

  • ์ปฌ๋Ÿผ์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ , ์›๋ž˜์˜ ๊ฐ’์„ ์ด์šฉํ•ด ์ธ๋ฑ์‹ฑํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜

  • Root Node, Branch Node(์ค‘๊ฐ„ ๋…ธ๋“œ), Leaf Node๋กœ ๊ตฌ์„ฑ

  • Root Node์™€ Branch Node๋Š” ์ธ๋ฑ์Šค ๋ ˆ์ฝ”๋“œ์™€ ์ž์‹ ๋…ธ๋“œ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ Leaf Node๋Š” ์ธ๋ฑ์Šค ๋ ˆ์ฝ”๋“œ์™€ ๋ ˆ์ฝ”๋“œ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

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

B+ Tree vs B-Tree

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

Hash Index

  • ํ•ด์‹œ ์ธ๋ฑ์Šค๋Š” InnoDB ์—์„œ ์–ด๋Œ‘ํ‹ฐ๋ธŒ ํ•ด์‹œ ์ธ๋ฑ์Šค(Adaptive Hash Index)๋กœ ์‚ฌ์šฉ๋˜๊ธฐ๋„ ํ•˜๊ณ , ์˜ค๋ผํด์—์„œ๋Š” ์กฐ์ธ์— ์‚ฌ์šฉ๋œ๋‹ค.
  • B-Tree ์ธ๋ฑ์Šค์™€ ๋‹ฌ๋ฆฌ ๋ฒ„์ผ“์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.
  • ์‚ฌ์šฉ์ž๊ฐ€ ๊ฒ€์ƒ‰ํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฐ’์„ ์ฃผ๋ฉด ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ๊ฑฐ์ณ์„œ ์ฐพ๊ณ ์ž ํ•˜๋Š” ํ‚ค๊ฐ’์ด ํฌํ•จ๋œ ๋ฒ„์ผ“(Bucket)์„ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ๋ฒ„์ผ“ ํ•˜๋‚˜๋งŒ ์ฝ์–ด์„œ ์‹ค์ œ ๋ ˆ์ฝ”๋“œ๊ฐ€ ์ €์žฅ๋œ ์œ„์น˜๋ฅผ ๋ฐ”๋กœ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.
  • Hash index ๋Š” ์›๋ž˜์˜ ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ํ•ด์‹œ ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ๋งŒ์„ ์ €์žฅํ•˜๊ฒŒ ๋จ์— ๋”ฐ๋ผ ํ‚ค ์ปฌ๋Ÿผ ๊ฐ’์€ 4~8๋ฐ”์ดํŠธ ์ •๋„๋กœ ์ž‘์€ ๊ธธ์ด๋กœ ์ค„์–ด ๋“ค๊ฒŒ ๋˜๊ณ  B-Tree ์ธ๋ฑ์Šค์— ๋น„ํ•ด ์ƒ๋‹นํžˆ ์ž‘์€ ํฌ๊ธฐ ์ด๋‹ค.
  • ์ž…๋ ฅํ•œ ๊ฐ’์ด ๋‹ค๋ฅด์ง€๋งŒ ํ•ด์‹œ๋œ ๊ฐ’์ด ๊ฐ™์„ ๊ฒฝ์šฐ ํ•ด์‹œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.ํ•ด์‹œ ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ ๊ฐ’์˜ ๋ฒ”์œ„๊ฐ€ ์ข์œผ๋ฉด ํ•„์š”ํ•œ ๋ฒ„์ผ“์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ ์–ด์ง€๊ฒŒ ๋˜๋ฉด์„œ ์ถฉ๋Œํ• ์ˆ˜ ์žˆ๋Š” ํ™•์œจ์ด ๋†’๊ฒŒ ๋œ๋‹ค. Hash index ์—์„œ ์ถฉ๋Œ์ด ๋งŽ์ด ๋ฐœ์ƒ ๋  ์ˆ˜๋ก ๊ฒ€์ƒ‰ ํšจ์œจ์ด ๋–จ์–ด์ง€๊ฒŒ ๋œ๋‹ค.
  • Hash index ๋Š” ๋™๋“ฑ(equal =) ๋น„๊ต ๊ฒ€์ƒ‰์‹œ ์‚ฌ์šฉ ๋ฐ ์ตœ์ ํ™” ๋˜์–ด ์žˆ์œผ๋ฉฐ ๋ฒ”์œ„๋‚˜ FullText Search ๋‚˜ ์ •๋ ฌ๋œ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ชฉ์ ์œผ๋กœ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค.
    • SELECT ์งˆ์˜ ์กฐ๊ฑด์—๋Š” ๋ถ€๋“ฑํ˜ธ ์—ฐ์‚ฐ(<>)๋„ ํฌํ•จ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ถ€๋“ฑํ˜ธ ์—ฐ์‚ฐ ์‚ฌ์šฉ ์‹œ ๋ฌธ์ œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

InnoDB Adaptive Hash Index

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

Hint

  • SQL ๋ฌธ์žฅ์— ํŠน๋ณ„ํ•œ ํ‚ค์›Œ๋“œ๋ฅผ ์ง€์ •ํ•˜์—ฌ ์˜ตํ‹ฐ๋งˆ์ด์ €์—๊ฒŒ ์–ด๋–ป๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š” ๊ฒƒ์ด ํšจ๊ณผ์ ์ธ์ง€ ์•Œ๋ ค์ฃผ๋Š” ํ‚ค์›Œ๋“œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
  • 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 ์˜ ์ผ๋ถ€๋กœ ํ•ด์„ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž˜ ๋ชป ์‚ฌ์šฉํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.