B-Tree Index

B-Tree ์ธ๋ฑ์Šค๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ธ๋ฑ์Šค๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ•, Binary์˜ B๊ฐ€ ์•„๋‹ˆ๋ผ Balanced์˜ B

๊ตฌ์กฐ ๋ฐ ํŠน์„ฑ

์ตœ์ƒ์œ„์— ํ•˜๋‚˜์˜ ๋ฃจํŠธ ๋…ธ๋“œ๊ฐ€ ์กด์žฌํ•˜๊ณ , ๊ทธ ํ•˜์œ„์— ์ž์‹ ๋…ธ๋“œ๊ฐ€ ๋ถ™์–ด ์žˆ๋Š” ํ˜•ํƒœ๋กœ ์•„๋ž˜์˜ ๋…ธ๋“œ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

  • Root Node: ์ตœ์ƒ์œ„ ๋…ธ๋“œ

  • Branch Node: ์ค‘๊ฐ„์— ์žˆ๋Š” ๋…ธ๋“œ

  • Leaf Node: ๊ฐ€์žฅ ํ•˜์œ„์— ์žˆ๋Š” ๋…ธ๋“œ

InnoDB์˜ ๋ฆฌํ”„ ๋…ธ๋“œ

InnoDB์—์„œ๋Š” ๋ฆฌํ”„ ๋…ธ๋“œ์—์„œ PK ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด ์‹ค์ œ ๋ฐ์ดํ„ฐ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ๊ณผ์ •์„ ๊ฑฐ์ณ์•ผ ํ•œ๋‹ค.(MyISAM์€ ๋ฆฌํ”„ ๋…ธ๋“œ์— ์‹ค์ œ ๋ฐ์ดํ„ฐ ๋ ˆ์ฝ”๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Œ)

  1. ๋ณด์กฐ ์ธ๋ฑ์Šค์—์„œ ์กฐ๊ฑด์— ๋งž๋Š” ๋ฆฌํ”„ ๋…ธ๋“œ๋ฅผ ์ฐพ์•„ PK ์กฐํšŒ

  2. PK๋ฅผ ํ†ตํ•ด ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค๋ฅผ ๋‹ค์‹œ ๊ฒ€์ƒ‰ํ•ด ์ตœ์ข… ๋ฐ์ดํ„ฐ ๋ ˆ์ฝ”๋“œ ์กฐํšŒ

InnoDB B-Tree

๊ฒฐ๊ตญ ์œ„์™€ ๊ฐ™์ด ์—ฌ๋Ÿฌ ๋ށ์Šค๋ฅผ ๊ฑฐ์ณ ์‹ค์ œ ๋ฐ์ดํ„ฐ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฐพ์•„์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋ฐ”๋กœ ๋ฐ์ดํ„ฐ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฐพ์„ ๋•Œ ๋ณด๋‹ค ์•ฝ 4-5๋ฐฐ ์ •๋„ ๋” ๋งŽ์€ ๋น„์šฉ์ด ๋ฐœ์ƒํ•œ๋‹ค.

๋ ˆ์ฝ”๋“œ ์ถ”๊ฐ€/์‚ญ์ œ/๋ณ€๊ฒฝ/๊ฒ€์ƒ‰ ๊ณผ์ •

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

  • ์ธ๋ฑ์Šค ํ‚ค ์ถ”๊ฐ€

    • B-Tree์— ์ €์žฅ๋  ๋•Œ ์ €์žฅ๋  ํ‚ค ๊ฐ’์„ ์ด์šฉํ•ด ์ ์ ˆํ•œ ์œ„์น˜๋ฅผ ํƒ์ƒ‰ ํ›„ ๋ฆฌํ”„ ๋…ธ๋“œ์— ์ €์žฅ

    • ๋งŒ์•ฝ ์ €์žฅํ•  ์œ„์น˜์— ๋ฆฌํ”„ ๋…ธ๋“œ๊ฐ€ ๊ฝ‰ ์ฐจ์žˆ๋‹ค๋ฉด ๋ฆฌํ”„ ๋…ธ๋“œ๋ฅผ ๋ถ„๋ฆฌํ•˜๊ณ  ์ƒˆ๋กœ์šด ๋ฆฌํ”„ ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑ

      • ์ด ๋•Œ ์ƒ์œ„ ๋ธŒ๋žœ์น˜ ๋…ธ๋“œ๊นŒ์ง€ ์ฒ˜๋ฆฌ ๋ฒ”์œ„๊ฐ€ ๋„“์–ด์ ธ ๋งŽ์€ ๋น„์šฉ์ด ๋ฐœ์ƒ

      • ์ด ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋น„์šฉ์˜ ๋Œ€๋ถ€๋ถ„์ด ๋ฉ”๋ชจ๋ฆฌ์™€ CPU์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ, ๋””์Šคํฌ๋กœ๋ถ€ํ„ฐ ์ฝ๊ณ /์“ฐ๊ธฐ ์ž‘์—…์— ๋งŽ์€ ๋น„์šฉ(์‹œ๊ฐ„)์ด ๋ฐœ์ƒ

    • InnoDB์˜ ๊ฒฝ์šฐ ์ธ๋ฑ์Šค ํ‚ค ์ถ”๊ฐ€ ์ž‘์—…์„ ์ง€์—ฐ์‹œ์ผœ ๋‚˜์ค‘์— ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹๋„ ์กด์žฌ(=์ฒด์ธ์ง€ ๋ฒ„ํผ)

      • Primary Key, Unique Index ๊ฒฝ์šฐ ์ค‘๋ณต์ฒดํฌ๊ฐ€ ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ง€์—ฐ์‹œํ‚ฌ ์ˆ˜ ์—†์Œ

  • ์ธ๋ฑ์Šค ํ‚ค ์‚ญ์ œ

    • ํ•ด๋‹น ํ‚ค ๊ฐ’์ด ์ €์žฅ๋œ B-Tree ๋ฆฌํ”„ ๋…ธ๋“œ๋ฅผ ์ฐพ์•„ ์‚ญ์ œ ๋งˆํฌ๋งŒ ํ•˜๋ฉด ์ž‘์—… ์™„๋ฃŒ

      • ์‚ญ์ œ ๋งˆํ‚น๋œ ์ธ๋ฑ์Šค ํ‚ค ๊ณต๊ฐ„์€ ๋ฐฉ์น˜ํ•˜๊ฑฐ๋‚˜ ์žฌํ™œ์šฉ ๊ฐ€๋Šฅ

    • ์‚ญ์ œ ๋˜ํ•œ ๋””์Šคํฌ ์“ฐ๊ธฐ๊ฐ€ ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋””์Šคํฌ I/O ๋น„์šฉ ๋ฐœ์ƒ

    • ์ถ”๊ฐ€์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์‚ญ์ œ ์ž‘์—…๋„ ์ง€์—ฐ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Œ

  • ์ธ๋ฑ์Šค ํ‚ค ๋ณ€๊ฒฝ

    • B-Tree์˜ ํ‚ค ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒฝ์šฐ ๋ฆฌํ”„ ๋…ธ๋“œ ์œ„์น˜์˜ ๋ณ€๊ฒฝ ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ด ๋•Œ ํ‚ค ๊ฐ’์„ ์‚ญ์ œํ•œ ํ›„ ์ƒˆ๋กœ์šด ํ‚ค ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌ

    • ์œ„์˜ ์‚ญ์ œ ๋ฐ ์ถ”๊ฐ€ ๊ณผ์ •์ด ์ ˆ์ฐจ์ ์œผ๋กœ ์ง„ํ–‰(๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ง€์—ฐ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ)

  • ์ธ๋ฑ์Šค ํ‚ค ๊ฒ€์ƒ‰

    • ์œ„์˜ ๋น„์šฉ๋“ค์„ ๊ฐ์ˆ˜ํ•˜๊ณ  ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ  ์ค‘ ํ•˜๋‚˜(๋น ๋ฅธ ํƒ์ƒ‰)

    • ๋ฃจํŠธ ๋…ธ๋“œ๋กœ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด ๋ธŒ๋žœ์น˜ ๋…ธ๋“œ๋ฅผ ๊ฑฐ์ณ ์ตœ์ข… ๋ฆฌํ”„ ๋…ธ๋“œ๊นŒ์ง€ ์ด๋™ํ•˜๋ฉด์„œ ํƒ์ƒ‰(=ํŠธ๋ฆฌ ํƒ์ƒ‰)

    • SELECT(์กฐํšŒ)์—์„œ๋งŒ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ UPDATE/DELETE์—์„œ๋„ ์กฐํšŒ ํ›„ ๋ณ€๊ฒฝ/์‚ญ์ œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ๋จ

ํŽ˜์ด์ง€(Page)

ํŽ˜์ด์ง€๋Š” ๋””์Šคํฌ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ธฐ๋ณธ ๋‹จ์œ„๋กœ, ๋””์Šคํฌ์˜ ๋ชจ๋“  ์ฝ๊ธฐ ๋ฐ ์“ฐ๊ธฐ ์ž‘์—…์˜ ์ตœ์†Œ ์ž‘์—… ๋‹จ์œ„๊ฐ€ ๋œ๋‹ค.

  • InnoDB ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์˜ ๋ฒ„ํผ ํ’€์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฒ„ํผ๋งํ•˜๋Š” ๊ธฐ๋ณธ ๋‹จ์œ„

  • ํ•˜๋‚˜์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฝ๋”๋ผ๋„ ๊ฒฐ๊ตญ์—” ํ•˜๋‚˜์˜ ํŽ˜์ด์ง€ ๋‹จ์œ„๋กœ ์กฐํšŒ ํ•„์š”

๋•Œ๋ฌธ์— ํ•˜๋‚˜์˜ ํŽ˜์ด์ง€์— ๋งŽ์€ ๋ ˆ์ฝ”๋“œ๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ์„์ˆ˜๋ก ๋””์Šคํฌ I/O๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ํšŸ์ˆ˜๊ฐ€ ์ค„์–ด๋“ค๊ฒŒ ๋˜๊ณ , ์„ฑ๋Šฅ ํ–ฅ์ƒ์— ๋„์›€์ด ๋œ๋‹ค.

์ธ๋ฑ์Šค ์‚ฌ์šฉ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ์š”์†Œ

์ธ๋ฑ์Šค๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์ปฌ๋Ÿผ์˜ ํฌ๊ธฐ / ๋ ˆ์ฝ”๋“œ ๊ฑด์ˆ˜ / ์œ ๋‹ˆํฌ ์ธ๋ฑ์Šค ํ‚ค ๊ฐ’์˜ ๊ฐœ์ˆ˜ ๋“ฑ์— ๋”ฐ๋ผ ๋ณ€๊ฒฝ/์กฐํšŒ ์„ฑ๋Šฅ์ด ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค.

1. ์ธ๋ฑ์Šค ํ‚ค ๊ฐ’์˜ ํฌ๊ธฐ

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

  • ์ธ๋ฑ์Šค ํŽ˜์ด์ง€ ํฌ๊ธฐ: 16KB

  • ์ธ๋ฑ์Šค ํ‚ค: 16 Byte

  • ์ž์‹๋…ธ๋“œ ์ฃผ์†Œ: 12 Byte

  • ํ•˜๋‚˜์˜ ์ธ๋ฑ์Šค ํŽ˜์ด์ง€์— ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ํ‚ค ๊ฐ’์˜ ๊ฐœ์ˆ˜: 16 * 1024 / (16 + 12) = 585

์ธ๋ฑ์Šค์˜ ํ‚ค๊ฐ€ ์ปค์ง€๊ฒŒ ๋˜๋ฉด, ๊ทธ๋งŒํผ ํ•˜๋‚˜์˜ ์ธ๋ฑ์Šค ํŽ˜์ด์ง€์— ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ํ‚ค ๊ฐ’์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ค„์–ด๋“ค๊ฒŒ ๋˜๋ฉด์„œ, ๋””์Šคํฌ I/O ํšŸ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ•˜๊ณ  ๊ทธ๋งŒํผ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋œ๋‹ค.

2. B-Tree ๊นŠ์ด

B-Tree ์ธ๋ฑ์Šค์˜ ๊นŠ์ด๋Š” ์„ฑ๋Šฅ์ด ์ค‘์š”ํ•œ ์š”์†Œ ์ค‘ ํ•˜๋‚˜์ง€๋งŒ, ์ง์ ‘ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ์š”์†Œ๊ฐ€ ์•„๋‹ˆ๋ฉฐ, ์ธ๋ฑ์Šค ํ‚ค ๊ฐ’์˜ ํฌ๊ธฐ์— ๋”ฐ๋ผ ๊ฒฐ์ •๋œ๋‹ค.

  1. ์ธ๋ฑ์Šค ํ‚ค ๊ฐ’์˜ ํ‰๊ท  ํฌ๊ธฐ๊ฐ€ ๋Š˜์–ด๋‚˜๋ฉด ํ•˜๋‚˜์˜ ํŽ˜์ด์ง€์— ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ํ‚ค ๊ฐ’์˜ ๊ฐœ์ˆ˜ ๊ฐ์†Œ

  2. ํ•˜๋‚˜์˜ ํŽ˜์ด์ง€์— ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ํ‚ค ๊ฐ’์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ค„์–ด๋“ค์–ด, ํ•˜๋‚˜์˜ ๋…ธ๋“œ์— ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ์ž์‹ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๋„ ๊ฐ์†Œ

  3. ๊ฒฐ๊ตญ B-Tree์˜ ๊นŠ์ด ์ฆ๊ฐ€

  4. ๊นŠ์ด๊ฐ€ ๊นŠ์–ด์งˆ ์ˆ˜๋ก ๋””์Šคํฌ I/O ํšŸ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ -> ์„ฑ๋Šฅ ์ €ํ•˜

๋•Œ๋ฌธ์— ์ธ๋ฑ์Šค ํ‚ค ๊ฐ’์˜ ํ‰๊ท  ํฌ๊ธฐ๋ฅผ ์ค„์ด๋Š” ๊ฒƒ์€ ๊นŠ์ด๋ฅผ ์ค„์ด๋Š” ๊ฒƒ๊ณผ ์ง๊ฒฐ๋˜๊ณ , ์ด๋Š” ๋””์Šคํฌ I/O ํšŸ์ˆ˜๋ฅผ ์ค„์ด๊ฒŒ ๋˜๋ฉด์„œ, ๊ทธ๋งŒํผ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

3. ์ฝ์–ด์•ผ ํ•˜๋Š” ๋ ˆ์ฝ”๋“œ์˜ ๊ฑด์ˆ˜

์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•œ ์ฝ๊ธฐ๋Š” ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์•ผ ํ•œ๋‹ค๋ฉด ์˜คํžˆ๋ ค ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ๋‹ค.

  • ์ง์ ‘ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฝ๋Š” ๊ฒƒ๋ณด๋‹ค ๋†’์€ ๋น„์šฉ(4-5๋ฐฐ)์ด ๋ฐœ์ƒ

  • ์ „์ฒด ๋ ˆ์ฝ”๋“œ์˜ 20-25%๋ฅผ ๋„˜์–ด๊ฐ€๋Š” ๊ฒฝ์šฐ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ๋” ํšจ์œจ์ 

4. ์„ ํƒ๋„(๊ธฐ์ˆ˜์„ฑ)

์„ ํƒ๋„(Selectivity) / ๊ธฐ์ˆ˜์„ฑ(Cardinality)๋Š” ๊ฑฐ์˜ ๊ฐ™์€ ์˜๋ฏธ๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ, ๋ชจ๋“  ์ธ๋ฑ์Šค ํ‚ค ๊ฐ’ ๊ฐ€์šด๋ฐ ์œ ๋‹ˆํฌํ•œ ๊ฐ’์˜ ์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

  • ์ „์ฒด ์ธ๋ฑ์Šค ํ‚ค ๊ฐ’: 100๊ฐœ

  • ์œ ๋‹ˆํฌํ•œ ๊ฐ’: 10๊ฐœ

  • ๊ธฐ์ˆ˜์„ฑ: 10

์ค‘๋ณต๋œ ๊ฐ’์ด ๋งŽ์•„์ง€๋ฉด ๊ธฐ์ˆ˜์„ฑ์ด ๋‚ฎ์•„์ง€๊ฒŒ ๋˜๊ณ , ๊ธฐ์ˆ˜์„ฑ์ด ๋‚ฎ์•„์ง€๋ฉด ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์•ผ ํ•  ๋ ˆ์ฝ”๋“œ์˜ ๊ฑด์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚˜๊ฒŒ ๋œ๋‹ค.

์˜ˆ์‹œ

  • ์ธ๋ฑ์Šค๋œ ์ปฌ๋Ÿผ(country)์— ๋Œ€ํ•ด์„œ๋Š” ์ „์ฒด ๋ ˆ์ฝ”๋“œ์˜ ๊ฑด์ˆ˜๋‚˜ ์œ ๋‹ˆํฌํ•œ ๊ฐ’์˜ ๊ฐœ์ˆ˜ ๋“ฑ์— ๋Œ€ํ•œ ํ†ต๊ณ„ ์ •๋ณด๋ฅผ ๊ฐ€์ง

  • ์ „์ฒด ๋ ˆ์ฝ”๋“œ ๊ฑด์ˆ˜๋ฅผ ์œ ๋‹ˆํฌ ๊ฐ’ ๊ฐœ์ˆ˜๋กœ ๋‚˜๋ˆ„๊ฒŒ๋˜๋ฉด ํ•˜๋‚˜์˜ ํ‚ค ๊ฐ’์œผ๋กœ ๊ฒ€์ƒ‰ํ–ˆ์„ ๋•Œ ํ‰๊ท ์ ์œผ๋กœ ์ฝ์–ด์•ผ ํ•˜๋Š” ๋ ˆ์ฝ”๋“œ ๊ฑด์ˆ˜๋ฅผ ์•Œ ์ˆ˜ ์žˆ์Œ

๊ธฐ์ˆ˜์„ฑ์ด ๋‚ฎ์•„์ง€๋ฉด ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ์ฝ์–ด์•ผ ํ•  ๋ ˆ์ฝ”๋“œ์˜ ๊ฑด์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚˜๊ฒŒ ๋˜๋ฉด์„œ, ๊ทธ๋งŒํผ ํŽ˜์ด์ง€๋ฅผ ์ฝ์–ด์•ผ ํ•˜๋Š” ํšŸ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚˜๊ฒŒ ๋˜๊ณ , ๊ทธ๋งŒํผ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋œ๋‹ค.

B-Tree ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•œ ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ

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

์ธ๋ฑ์Šค ์ ‘๊ทผ ๋ฐฉ๋ฒ• ๊ฐ€์šด๋ฐ ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ, ์‹œ์ž‘ํ•ด์•ผ ํ•  ์œ„์น˜๋ฅผ ์ฐพ๊ณ  ๊ทธ ์œ„์น˜๋ถ€ํ„ฐ ๋๊นŒ์ง€ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฝ์–ด์„œ ๊ฒ€์ƒ‰ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

  1. ์ธ๋ฑ์Šค ํƒ์ƒ‰: ๋ฆฌํ”„ ๋…ธ๋“œ๊นŒ์ง€ ๋“ค์–ด๊ฐ€ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๊ฐ’์ธ ์Šค์บ” ์‹œ์ž‘ ์ง€์  ํƒ์ƒ‰

  2. ์ธ๋ฑ์Šค ์Šค์บ”: ์œ„์—์„œ ํƒ์ƒ‰๋œ ์œ„์น˜๋ถ€ํ„ฐ ํ•„์š”ํ•œ ๋งŒํผ ์ธ๋ฑ์Šค๋ฅผ ์ฐจ๋ก€๋Œ€๋กœ ์Šค์บ”

  3. ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ ์ ‘๊ทผ: ์ฝ์–ด๋“ค์ธ ์ธ๋ฑ์Šค ํ‚ค์™€ PK๋ฅผ ์ด์šฉํ•ด ์ผ์น˜ํ•œ ์‹ค์ œ ๋ฐ์ดํ„ฐ ๋ ˆ์ฝ”๋“œ ์กฐํšŒ(๋žœ๋ค I/O ๋ฐœ์ƒ)

์ปค๋ฒ„๋ง ์ธ๋ฑ์Šค

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

  • ์ธ๋ฑ์Šค ์Šค์บ”๋งŒ์œผ๋กœ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ ์กฐํšŒ ๊ฐ€๋Šฅ

  • 3๋ฒˆ์— ํ•ด๋‹นํ•˜๋Š” ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฝ์–ด์˜ค๋Š” ์ž‘์—…์„ ์ƒ๋žตํ•˜์—ฌ ๋žœ๋ค I/O๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Œ

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

์ธ๋ฑ์Šค์˜ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๋ชจ๋‘ ์ฝ๋Š” ๋ฐฉ์‹์œผ๋กœ, ๋ณดํ†ต ์กฐ๊ฑด์ ˆ์— ์‚ฌ์šฉ๋œ ์ปฌ๋Ÿผ์ด ์ธ๋ฑ์Šค์˜ ์ฒซ ๋ฒˆ์งธ ์ปฌ๋Ÿผ์ด ์•„๋‹Œ ๋‘ ๋ฒˆ์งธ ์ดํ›„์˜ ์ปฌ๋Ÿผ์ธ ๊ฒฝ์šฐ์— ์‚ฌ์šฉ๋œ๋‹ค.

  • ์ธ๋ฑ์Šค์— ๋ช…์‹œ๋œ ์ปฌ๋Ÿผ๋งŒ์œผ๋กœ ์กฐ๊ฑด์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ(์ปค๋ฒ„๋ง ์ธ๋ฑ์Šค ์กฐ๊ฑด) ์‚ฌ์šฉ

  • ๋ณดํ†ต ์ธ๋ฑ์Šค์˜ ํฌ๊ธฐ๋Š” ์‹ค์ œ ๋ ˆ์ฝ”๋“œ๊ฐ€ ๋‹ด๊ธด ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ๋ณด๋‹ค ์ž‘์œผ๋ฏ€๋กœ ์ง์ ‘ ํ…Œ์ด๋ธ”์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ์ฝ๋Š” ํ…Œ์ด๋ธ” ํ’€ ์Šค์บ”๋ณด๋‹ค ํšจ์œจ์ 

3. ๋ฃจ์Šค ์ธ๋ฑ์Šค ์Šค์บ”

์ค‘๊ฐ„์— ํ•„์š”์น˜ ์•Š๋Š” ์ธ๋ฑ์Šค ํ‚ค ๊ฐ’์€ ๋ฌด์‹œ(SKIP)ํ•˜๊ณ  ์ฝ๋Š” ๋ฐฉ์‹์œผ๋กœ, ์ผ๋ฐ˜์ ์œผ๋กœ GROUP BY ๋˜๋Š” MAX(), MIN() ๊ฐ™์€ ์ง‘ํ•ฉ ํ•จ์ˆ˜์— ๋Œ€ํ•ด ์ตœ์ ํ™” ํ•˜๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•œ๋‹ค.

์ธ๋ฑ์Šค๊ฐ€ (dept_no, emp_no) ์กฐํ•ฉ์œผ๋กœ ์ด๋ฏธ ์ •๋ ฌ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— depth_no ๊ทธ๋ฃน ๋ณ„๋กœ ์ฒซ ๋ฒˆ์งธ ๋ ˆ์ฝ”๋“œ(๊ฐ€์žฅ ์ž‘์€ emp_no)๋งŒ ์ฝ์–ด์˜ค๋ฉด ๋œ๋‹ค.

๋ฆฌํ”„ ๋…ธ๋“œ ํŽ˜์ด์ง€
dept_no
emp_no
dept_name
first_name
์Šค์บ” ์—ฌ๋ถ€

5

d002

10042

Finance

Magy

O

5

d002

10043

Finance

Yinghua

X

5

d002

10044

Finance

Eber

X

...

...

...

...

...

X

...

...

...

...

...

X

6

d003

10045

Human

Kyoichi

O

6

d003

10046

Human

Eberhardt

X

6

d003

10047

Human

Admanatios

X

...

...

...

...

...

X

...

...

...

...

...

X

7

d004

10048

Legal

Seong

O

7

d004

10049

Legal

Ziya

X

7

d004

10050

Legal

Eber

X

...

...

...

...

...

...

์ฆ‰ ์ธ๋ฑ์Šค์—์„œ WHERE ์กฐ๊ฑด์— ๋งŒ์กฑํ•˜๋Š” ๋ฒ”์œ„ ์ „์ฒด๋ฅผ ์Šค์บ”ํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฒƒ์„ ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ํŒ๋‹จํ•˜๊ณ  ์ค‘๊ฐ„์˜ ๋ ˆ์ฝ”๋“œ๋Š” ๋ฌด์‹œํ•˜๊ณ  ํ•„์š”ํ•œ ๋ ˆ์ฝ”๋“œ๋งŒ ์ฝ์–ด์˜ค๋Š” ๋ฐฉ์‹์ด๋‹ค.

์ธ๋ฑ์Šค ์Šคํ‚ต ์Šค์บ”

๋‹ค์ค‘ ์ปฌ๋Ÿผ ์ธ๋ฑ์Šค (col_a, col_b)์—์„œ col_a ์กฐ๊ฑด ์—†์ด col_b๋งŒ์œผ๋กœ๋„ ์ธ๋ฑ์Šค๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.

๋ฆฌํ”„ ๋…ธ๋“œ ํŽ˜์ด์ง€
gender
birth_date
์Šค์บ” ์—ฌ๋ถ€

5

M

1965-03-09

X

5

M

1965-05-09

O

5

M

1965-06-09

O

...

...

...

O

6

M

1965-12-09

O

6

F

1965-01-09

X

6

F

1965-02-09

X

...

...

...

X

7

F

1965-04-09

X

7

F

1965-05-09

O

7

F

1965-06-09

O

...

...

...

O

  1. gender ์ปฌ๋Ÿผ์ด ๊ฐ€์ง„ ์œ ๋‹ˆํฌ ๊ฐ’์„ ๊ตฌํ•จ(์ปฌ๋Ÿผ์˜ ํƒ€์ž…์€ ์ƒ๊ด€ ์—†์Œ)

  2. ๊ฐ ์œ ๋‹ˆํฌ ๊ฐ’์— ๋Œ€ํ•ด ์กฐ๊ฑด์„ ์ถ”๊ฐ€ํ•œ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰

  3. ๊ฐ ์ฟผ๋ฆฌ๋ฅผ ๋ ˆ์ธ์ง€ ์Šค์บ”์œผ๋กœ ์ฒ˜๋ฆฌ

  4. ๊ฐ ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ๋ฅผ ํ•ฉ์ณ์„œ ์ตœ์ข… ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜

๊ฒฐ๊ตญ gender ์ปฌ๋Ÿผ์—์„œ ์œ ๋‹ˆํฌํ•œ ๊ฐ’์„ ๋ชจ๋‘ ์กฐํšŒํ•˜์—ฌ ์ฃผ์–ด์ง„ ์ฟผ๋ฆฌ์— gender ์ปฌ๋Ÿผ์˜ ์กฐ๊ฑด์„ ์ถ”๊ฐ€ํ•ด์„œ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ํ˜•ํƒœ์˜ ์ตœ์ ํ™”๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

ํ•˜์ง€๋งŒ ์•„๋ž˜ ๋‘ ๊ฐ€์ง€ ๋‹จ์ ์ด ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•ญ์ƒ ๋น ๋ฅธ ์„ฑ๋Šฅ์„ ๋ณด์žฅํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.

  • WHERE ์กฐ๊ฑด์ ˆ์— ์กฐ๊ฑด์ด ์—†๋Š” ์ธ๋ฑ์Šค์˜ ์„ ํ–‰ ์ปฌ๋Ÿผ์˜ ์œ ๋‹ˆํฌํ•œ ๊ฐ’์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์„์ˆ˜๋ก ์„ฑ๋Šฅ์ด ์ €ํ•˜

  • ์ฟผ๋ฆฌ๊ฐ€ ์ธ๋ฑ์Šค์— ์กด์žฌํ•˜๋Š” ์ปฌ๋Ÿผ๋งŒ ์กด์žฌ(= ์ปค๋ฒ„๋ง ์ธ๋ฑ์Šค)

    • ์ธ๋ฑ์Šค ์™ธ์˜ ์ปฌ๋Ÿผ์„ ํ•„์š”๋กœ ํ•˜๋Š” ๊ฒฝ์šฐ ํ’€ ํ…Œ์ด๋ธ” ์Šค์บ”์œผ๋กœ ์ฒ˜๋ฆฌ

๋‹ค์ค‘ ์ปฌ๋Ÿผ(Multi-column) ์ธ๋ฑ์Šค

์ฒซ ๋ฒˆ์งธ ์ปฌ๋Ÿผ์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ๋œ ํ›„, ๊ทธ ์•ˆ์—์„œ ๋‘ ๋ฒˆ์งธ ์ปฌ๋Ÿผ์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ๋˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

  • ์ธ๋ฑ์Šค๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์ปฌ๋Ÿผ์˜ ์ˆœ์„œ๊ฐ€ ์ค‘์š”

  • ์ฒซ ๋ฒˆ์งธ ์ปฌ๋Ÿผ์— ๋Œ€ํ•œ ์กฐ๊ฑด์ด ์—†์œผ๋ฉด ์ธ๋ฑ์Šค ์‚ฌ์šฉ ๋ถˆ๊ฐ€๋Šฅ(์ธ๋ฑ์Šค ์Šคํ‚ต ์Šค์บ” ๊ธฐ๋Šฅ ์ œ์™ธ)

  • ์ฒซ ๋ฒˆ์งธ ์ปฌ๋Ÿผ์— ๋Œ€ํ•œ ์กฐ๊ฑด์ด ์žˆ์œผ๋ฉด ๊ทธ ๋‹ค์Œ ์ปฌ๋Ÿผ์— ๋Œ€ํ•œ ์กฐ๊ฑด์ด ์—†์–ด๋„ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

B-Tree ์ธ๋ฑ์Šค์˜ ์ •๋ ฌ ๋ฐ ์Šค์บ” ๋ฐฉํ–ฅ

์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ์„ค์ •ํ•œ ์ •๋ ฌ ๊ทœ์น™์— ๋”ฐ๋ผ ํ•ญ์ƒ ์˜ค๋ฆ„์ฐจ์ˆœ/๋‚ด๋ฆผ์ฐจ์ˆœ ์ค‘ ํ•˜๋‚˜๋กœ ์ •๋ ฌ๋˜์–ด ์ €์žฅ๋œ๋‹ค.

  • ์ƒ์„ฑ๋œ ์ธ๋ฑ์Šค์™€๋Š” ๋ณ„๊ฐœ๋กœ ์Šค์บ” ํ•  ๋•Œ๋Š” ์ƒ์„ฑ๋œ ์ธ๋ฑ์Šค์˜ ์ •๋ ฌ ๊ทœ์น™๊ณผ๋Š” ์ƒ๊ด€์—†์ด ์›ํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์Šค์บ” ๊ฐ€๋Šฅ(๋ฐฉํ–ฅ์€ ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋งŒ๋“ค์–ด๋‚ธ ์‹คํ–‰ ๊ณ„ํš์— ๋”ฐ๋ผ ๊ฒฐ์ •)

  • ๊ธฐ๋ณธ์ ์œผ๋กœ ํŽ˜์ด์ง€ ์ž ๊ธˆ์ด ์ธ๋ฑ์Šค ์ •์ˆœ ์Šค์บ”(Forward index scan)์— ๋” ์ ํ•ฉํ•œ ๊ตฌ์กฐ๊ธฐ ๋•Œ๋ฌธ์— ์ •๋ฐฉํ–ฅ ์Šค์บ”์„ ๋” ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌ

B-Tree ์ธ๋ฑ์Šค์˜ ๊ฐ€์šฉ์„ฑ๊ณผ ํšจ์œจ์„ฑ

๋น„๊ต ์กฐ๊ฑด ์ข…๋ฅ˜

๋‹ค์ค‘ ์ปฌ๋Ÿผ ์ธ๋ฑ์Šค์—์„œ ๊ฐ ์ปฌ๋Ÿผ์˜ ์ˆœ์„œ์™€ ๋น„๊ต ์กฐ๊ฑด์— ๋”ฐ๋ผ ์ธ๋ฑ์Šค์˜ ๊ฐ€์šฉ์„ฑ๊ณผ ํšจ์œจ์„ฑ์ด ๋‹ฌ๋ผ์ง„๋‹ค.

์ผ€์ด์Šค A: INDEX(dept_no, emp_no)

dept_no='d002' AND emp_no>=10114์ธ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฐพ๊ณ  dept_no๊ฐ€ 'd002'๊ฐ€ ์•„๋‹ ๋•Œ ๊นŒ์ง€ ์Šค์บ”

ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ
dept_no
emp_no
์Šค์บ” ์—ฌ๋ถ€

...

...

...

X

6

d002

10114

O

6

d002

10117

O

6

d002

10300

O

...

...

...

O

7

d002

10595

O

7

d003

10111

X

...

...

...

X

์ผ€์ด์Šค B: INDEX(emp_no, dept_no)

dept_no='d002' AND emp_no>=10114์ธ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฐพ๊ณ  ๊ทธ ํ›„ ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ์— ๋Œ€ํ•ด dept_no๊ฐ€ 'd002'์ธ์ง€ ํ™•์ธ

ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ
emp_no
dept_no
์Šค์บ” ์—ฌ๋ถ€

...

...

...

...

6

10111

d003

X

6

10114

d002

O

6

10117

d002

O

6

10300

d002

O

...

...

...

O

7

10595

d002

O

...

...

d001

O

์ธ๋ฑ์Šค ์‚ฌ์šฉ ๋ถˆ๊ฐ€ ์กฐ๊ฑด

B-Tree ์ธ๋ฑ์Šค๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ๋น„๊ต ์กฐ๊ฑด์— ๋Œ€ํ•ด์„œ๋Š” ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

  • NOT-EQUAL๋กœ ๋น„๊ต๋œ ๊ฒฝ์šฐ

    • WHERE column <> 'N'

    • WHERE column NOT IN ('N', 'M')

    • WHERE column IS NOT NULL

  • LIKE '%??'(๋’ท ๋ถ€๋ถ„ ์ผ์น˜)๋กœ ๋น„๊ต๋œ ๊ฒฝ์šฐ

    • WHERE column LIKE '%mer'

    • WHERE column LIKE '_mer'

    • WHERE column LIKE '%mer%'

  • ์Šคํ† ์–ด๋“œ ํ•จ์ˆ˜๋‚˜ ๋‹ค๋ฅธ ์—ฐ์‚ฐ์ž๋กœ ์ธ๋ฑ์Šค ์ปฌ๋Ÿผ์ด ๋ณ€ํ˜•๋œ ํ›„ ๋น„๊ต๋œ ๊ฒฝ์šฐ

    • WHERE SUBSTRING(column, 1, 1) = 'X'

    • WHERE DAYOFMONTH(column) = 1

  • NOT-DETERMINISTIC ์†์„ฑ์˜ ์Šคํ† ์–ด๋“œ ํ•จ์ˆ˜๊ฐ€ ๋น„๊ต ์กฐ๊ฑด์— ์‚ฌ์šฉ๋œ ๊ฒฝ์šฐ

    • WHERE column = deterministic_function()

  • ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ์„œ๋กœ ๋‹ค๋ฅธ ๋น„๊ต

    • WHERE char_column = 10

  • ๋ฌธ์ž์—ด ๋ฐ์ดํ„ฐ ํƒ€์ž…์˜ ์ฝœ๋ ˆ์ด์…˜์ด ๋‹ค๋ฅธ ๊ฒฝ์šฐ

    • WHERE utf8_bin_char_column = euckr_bin_char_column

์ฐธ๊ณ ์ž๋ฃŒ

Last updated

Was this helpful?