Computer Science/๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

[๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค] B- Tree์™€ ์ธ๋ฑ์Šค์˜ ์ดํ•ด

kite707 2024. 9. 4.

์ด ๊ธ€์€ ์•„๋ž˜ ๊ธ€์„ ์ฝ์œผ๋ฉฐ ์ •๋ฆฌํ•œ ๋‚ด์šฉ๊ณผ, ์ถ”๊ฐ€๋กœ ๊ถ๊ธˆํ•œ ์ ์„ ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.
https://mangkyu.tistory.com/286

 

[MySQL] B-Tree๋กœ ์ธ๋ฑ์Šค(Index)์— ๋Œ€ํ•ด ์‰ฝ๊ณ  ์™„๋ฒฝํ•˜๊ฒŒ ์ดํ•ดํ•˜๊ธฐ

์ธ๋ฑ์Šค๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹(๋˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜)์— ๋”ฐ๋ผ B-Tree ์ธ๋ฑ์Šค, Hash ์ธ๋ฑ์Šค, Fractal ์ธ๋ฑ์Šค ๋“ฑ์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ B-Tree ๊ตฌ์กฐ๊ฐ€ ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— B-Tree ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ์ธ๋ฑ์Šค์˜ ๋™์ž‘

mangkyu.tistory.com

 

 

B- Tree๋Š” BinaryTree(์ž์‹์ด 2๊ฐœ์ธ ํŠธ๋ฆฌ)์—์„œ ๊ฐœ๋…์„ ํ™•์žฅํ•ด n๊ฐœ์˜ ์ž์‹์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋„๋ก ํ•œ ๊ฒƒ์ด๋‹ค.

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

ํŽ˜์ด์ง€: ๋””์Šคํฌ์™€ ๋ฉ”๋ชจ๋ฆฌ(๋ฒ„ํผํ’€)์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ฐ๋Š” ์ตœ์†Œ ๋‹จ์œ„

 

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ํŽ˜์ด์ง€์— ๋“ค์–ด๊ฐ€๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ตœ๋Œ€ํ•œ ์ž‘๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค. ๋งŒ์•ฝ ํŽ˜์ด์ง€์— ์ €์žฅ๋˜๋Š” ๋ฐ์ดํ„ฐ ํฌ๊ธฐ๊ฐ€ ํฌ๋‹ค๋ฉด ์•„๋ž˜ 2๊ฐ€์ง€ ๋ฌธ์ œ์ ์ด ๋ฐœ์ƒํ•œ๋‹ค.

  1. ํŽ˜์ด์ง€์— ๋ฐ์ดํ„ฐ๊ฐ€ ์กฐ๊ธˆ๋ฐ–์— ๋ชป๋“ค์–ด๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ ํŽ˜์ด์ง€๋ฅผ ์ฝ์–ด์™€์•ผํ•œ๋‹ค
    =>๋””์Šคํฌ I/O ์ฆ๊ฐ€
  2. ํŽ˜์ด์ง€์˜ ํฌ๊ธฐ๊ฐ€ ์ปค์ง„๋‹ค.
    =>๋ฉ”๋ชจ๋ฆฌ์— ์บ์‹ฑํ•  ์ˆ˜ ์žˆ๋Š” ํŽ˜์ด์ง€์˜ ์ˆ˜ ๊ฐ์†Œ

DB์˜ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋””์Šคํฌ I/O ์ž์ฒด๋ฅผ ์ค„์ด๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ์ธ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

์ธ๋ฑ์Šค

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

 

์ฆ‰ ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•œ๋‹ค๋Š” ๊ฒƒ์€ ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด PK์ฐพ๊ธฐ-> ์ฐพ์€ PK๋ฅผ ํ†ตํ•œ ๋ ˆ์ฝ”๋“œ ์กฐํšŒ๋ฅผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ๋ ˆ์ฝ”๋“œ๋ฅผ ์กฐํšŒํ•˜๋Š” ๊ฒƒ์€ ํ•˜๋‚˜์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ์กฐํšŒํ•˜๋Š” ๊ฒƒ ๋ณด๋‹ค ๋น„์šฉ์ด ๋งŽ์ด ๋“ ๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ์ฝ์–ด์•ผ ํ•  ๋ ˆ์ฝ”๋“œ์˜ ๊ฑด ์ˆ˜๊ฐ€ ์ „์ฒด ํ…Œ์ด๋ธ” ๋ ˆ์ฝ”๋“œ์˜ 20~25%๋ฅผ ๋„˜์–ด๊ฐ€๋ฉด ๊ทธ๋ƒฅ ์ฝ๋Š” ๊ฒƒ์ด ๋” ํšจ์œจ์ ์ด๋ฉฐ ์ด๋•Œ๋Š” ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ์ธ๋ฑ์Šค๋ฅผ ์•ˆ์“ฐ๊ณ  ์ฒ˜๋ฆฌํ•œ๋‹ค.

DB๋ณ„ ์˜ตํ‹ฐ๋งˆ์ด์ €๋Š” ์ด ๋ถ€๋ถ„์„ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ• ๊นŒ?

1. Oracle
Oracle์˜ ์˜ตํ‹ฐ๋งˆ์ด์ €๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์ฝ์–ด์•ผ ํ•  ๋ ˆ์ฝ”๋“œ๊ฐ€ ์ „์ฒด ๋ฐ์ดํ„ฐ์˜ 5% ์ดํ•˜์ผ ๋•Œ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. 5% ์ดˆ๊ณผ ์‹œ, ์ „์ฒด ํ…Œ์ด๋ธ” ์Šค์บ”์ด ๋” ์ ํ•ฉํ•˜๋‹ค๊ณ  ํŒ๋‹จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2. SQL Server
SQL Server์˜ ๊ฒฝ์šฐ, ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ๋Œ€๋žต 20% ์ดํ•˜์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ์กฐํšŒํ•ด์•ผ ํ•  ๊ฒฝ์šฐ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค. 20%๋ฅผ ์ดˆ๊ณผํ•  ๊ฒฝ์šฐ, ํ…Œ์ด๋ธ” ์Šค์บ”์„ ์„ ํƒํ•˜์—ฌ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

3. MySQL
MySQL์˜ InnoDB ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์€ ๋ณดํ†ต 10% ๋‚ด์™ธ์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ์กฐํšŒํ•ด์•ผ ํ•  ๋•Œ ์ธ๋ฑ์Šค๋ฅผ ํ™œ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.์ด ๋น„์œจ์„ ์ดˆ๊ณผํ•˜๋ฉด MySQL์€ ์ „์ฒด ํ…Œ์ด๋ธ” ์Šค์บ”์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ๋” ํšจ์œจ์ ์ด๋ผ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4. PostgreSQL
PostgreSQL์˜ ์˜ตํ‹ฐ๋งˆ์ด์ €๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ 25% ์ดํ•˜์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ์กฐํšŒํ•ด์•ผ ํ•  ๊ฒฝ์šฐ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.25%๋ฅผ ์ดˆ๊ณผํ•˜๋ฉด ์ „์ฒด ํ…Œ์ด๋ธ” ์Šค์บ”์œผ๋กœ ์ „ํ™˜ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค.

5. MariaDB
MariaDB๋Š” MySQL๊ณผ ์œ ์‚ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋Œ€๋žต 10% ๋‚ด์™ธ์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ์กฐํšŒํ•  ๋•Œ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

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

 

์•ž์„œ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•œ PK์กฐํšŒ -> PK๋ฅผ ํ†ตํ•œ ๋ ˆ์ฝ”๋“œ ์กฐํšŒ๋ผ๊ณ  ํ–ˆ๋Š”๋ฐ, ์ธ๋ฑ์Šค๋ž‘ ๋ ˆ์ฝ”๋“œ์˜ ์ฃผ์†Œ๋ฅผ ๋งคํ•‘์‹œํ‚ค๋ฉด ์•ˆ๋˜๋‚˜?ํ•˜๋Š” ์˜๋ฌธ์„ ๊ฐ€์งˆ์ˆ˜๋„ ์žˆ๋‹ค. ์‹ค์ œ๋กœ ๋ช‡๋ช‡ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ ๋งคํ•‘์‹œํ‚จ๋‹ค. ํ•˜์ง€๋งŒ MySQL์—์„œ๋Š” PK๊ฐ€ ๋ ˆ์ฝ”๋“œ์˜ ๋ฌผ๋ฆฌ์ ์ธ ์ €์žฅ ์œ„์น˜๋ฅผ ๊ฒฐ์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งŒ์ผ PK๊ฐ€ ๋ฐ”๋€Œ๋ฉด ๋ฐ์ดํ„ฐ์˜ ๋ฌผ๋ฆฌ์ ์ธ ์ €์žฅ ์œ„์น˜๊ฐ€ ๋ฐ”๋€๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ธ๋ฑ์Šค๋Š” PK์— ์˜์กดํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

์ด๋ ‡๊ฒŒ ์ธ๋ฑ์Šค๋Š” PK์— ๋งคํ•‘๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— PK๊ฐ€ ํด์ˆ˜๋ก ์•ˆ์ข‹๋‹ค. PK๊ฐ’์ด ํด์ˆ˜๋ก ํ•œ ํŽ˜์ด์ง€์— ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ์ธ๋ฑ์Šค ์ •๋ณด๊ฐ€ ์ค„์–ด๋“ค๊ณ  ๋ฉ”๋ชจ๋ฆฌ๋„ ๋น„ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค. ํŽ˜์ด์ง€์˜ ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํŠธ๋ฆฌ์˜ ๊นŠ์ด๋„ ์ง€๋‚˜์น˜๊ฒŒ ๊นŠ์–ด์ง„๋‹ค.

 

์ธ๋ฑ์Šค์—๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ปฌ๋Ÿผ์œผ๋กœ ๊ตฌ์„ฑ๋  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์—ฌ๊ธฐ์—๋Š” PK๋„ ํฌํ•จ๋  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ๋‹ค์ค‘ ์ปฌ๋Ÿผ ์ธ๋ฑ์Šค(Multi Column Index)๋ผ๊ณ  ํ•œ๋‹ค. ๋งŒ์•ฝ A, B, C๋ฅผ ๋ฌถ์–ด ์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“ค๋ฉด B๋Š” A์— ์˜์กดํ•˜์—ฌ, C๋Š” B์— ์˜์กดํ•˜์—ฌ ์ •๋ ฌ๋œ๋‹ค.

 

๋งŒ์•ฝ emp_no, dept_no๋กœ ์ธ๋ฑ์Šค๊ฐ€ ์กด์žฌํ•  ๋•Œ, emp_no = 150์ด๊ณ  dept_no = D003์ธ ๊ฐ’์„ ์ฐพ๋Š”๊ฒƒ๊ณผ, dept_no=D003์ด๊ณ  emp_no=150์ธ ๊ฐ’์„ ์ฐพ๋Š” ๊ฒƒ์€ ์‹œ๊ฐ„์ด ๋‹ค๋ฅผ๊นŒ?

DB ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ์•Œ์•„์„œ ์ˆœ์„œ๋ฅผ ๋ฐ”๊ฟ”์„œ ์ˆ˜ํ–‰ํ•  ์ˆ˜๋„ ์žˆ๊ธฐ๋Š” ํ•˜๋‹ค. ๊ทธ๋ ‡์ง€๋งŒ ์ˆœ์„œ๋ฅผ ๋ฐ”๊ฟ”์„œ ์ธ๋ฑ์Šค๋ฅผ ํƒ€๋„๋ก ํ•œ๋‹ค๋Š” ๋ณด์žฅ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ฒซ๋ฒˆ์งธ์ฒ˜๋Ÿผ ์งœ์„œ ์ธ๋ฑ์Šค๋ฅผ ํ™•์‹คํžˆ ํƒ€๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•˜๋‹ค.

 

๊ทธ๋ ‡๊ธฐ์— ์ธ๋ฑ์Šค์—์„œ๋Š” ์ปฌ๋Ÿผ์˜ ์ˆœ์„œ๊ฐ€ ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค.

 

์ถ”๊ฐ€์ ์œผ๋กœ ์นด๋””๋„๋ฆฌํ‹ฐ(๊ณ ์œ ์„ฑ)๊ฐ€ ๋†’์€ ์ปฌ๋Ÿผ์— ์ธ๋ฑ์Šค๋ฅผ ๊ฑฐ๋Š” ๊ฒƒ๋„ ์ค‘์š”ํ•˜๋‹ค. ํ•˜์ง€๋งŒ ์นด๋””๋„๋ฆฌํ‹ฐ๊ฐ€ ๋‚ฎ๋”๋ผ๋„ ์ •๋ ฌ์ด๋‚˜ ๊ทธ๋ฃจํ•‘ ๋“ฑ์— ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ๋„ ๊ณ ๋ คํ•ด์•ผํ•œ๋‹ค. MySQL์—์„œ๋Š” ๊ฐ’์ด 1๊ฐœ๋งŒ ์กด์žฌํ•˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด ์œ ๋‹ˆํฌ ์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์œ ๋‹ˆํฌ ์ธ๋ฑ์Šค๋Š” ๋ฌด๊ฒฐ์„ฑ์„ ์œ„ํ•œ ์ค‘๋ณต ๊ฒ€์‚ฌ๊ฐ€ ํ•„์š”ํ•ด ์“ฐ๊ธฐ ์„ฑ๋Šฅ์ด ๋‚ฎ์•„์งˆ ์ˆ˜๋„ ์žˆ์ง€๋งŒ 1๋ฒˆ๋งŒ ์ฝ์–ด๋„ ๋˜๋‹ˆ ์ฝ๊ธฐ ์„ฑ๋Šฅ์€ ์˜ฌ๋ผ๊ฐ„๋‹ค.

 

์œ ๋‹ˆํฌ ์ธ๋ฑ์Šค๋ž€?

์œ ๋‹ˆํฌ ์ธ๋ฑ์Šค๋Š” ํ•ด๋‹น ์ปฌ๋Ÿผ์ด ์œ ๋‹ˆํฌํ•˜๋‹ค๊ณ  ๋งˆํ‚นํ•ด๋‘๋Š” ๊ฒƒ. ์‹ค์ œ๋กœ ์ปฌ๋Ÿผ์— unique์˜ต์…˜์„ ๊ฑธ์–ด๋„ ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” unique์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ฒ˜๋ฆฌํ•œ๋‹ค.

์นด๋””๋„๋ฆฌํ‹ฐ๊ฐ€ ๋‚ฎ์•„๋„ ์ธ๋ฑ์Šค๋ฅผ ๊ฑฐ๋Š” ์‚ฌ๋ก€๋Š” ๊ทธ๋ฃจํ•‘, count๋“ฑ์— ํšจ์œจ์ ์œผ๋กœ ์“ฐ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด์„œ SELECT dept_id, COUNT(*) FROM employees GROUP BY dept_id ์ฟผ๋ฆฌ์—์„œ dept_id์— ์ธ๋ฑ์Šค๊ฐ€ ์„ค์ •๋˜์–ด์žˆ๋‹ค๋ฉด ํ…Œ์ด๋ธ” ํ’€ ์Šค์บ”์„ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ธ๋ฑ์Šค, pk์Œ์„ ์ €์žฅํ•œ ๊ฐ’๋งŒ ์Šค์บ”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ›จ์”ฌ ๋น ๋ฅด๊ฒŒ ์Šค์บ”ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ธ๋ฑ์Šค์˜ ์ •๋ ฌ๊ณผ ์Šค์บ” ๋ฐฉํ–ฅ

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

 

์ฐธ๊ณ ํ•  ์ ์€ ์ธ๋ฑ์Šค๋Š” ์—ญ์ˆœ ์Šค์บ”๋ณด๋‹ค ์ •์ˆœ ์Šค์บ”์ด ๋” ๋น ๋ฅด๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ ์ด์œ ๋Š” ํŽ˜์ด์ง€ ์ž ๊ธˆ์ด ์ธ๋ฑ์Šค ์ •์ˆœ ์Šค์บ”์— ์ ํ•ฉํ•˜๊ณ , ํŽ˜์ด์ง€ ๋‚ด์—์„œ ์ธ๋ฑ์Šค ๋ ˆ์ฝ”๋“œ๊ฐ€ ๋‹จ๋ฐฉํ–ฅ์œผ๋กœ ์—ฐ๊ฒฐ๋œ ๊ตฌ์กฐ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. (์นด์นด์˜ค ํ…Œํฌ์—์„œ ์ž์„ธํžˆ ์„ค๋ช…)

๋ ˆ์ฝ”๋“œ ์ถ”๊ฐ€, ์‚ญ์ œ ์ˆ˜์ •

๋ ˆ์ฝ”๋“œ ์ถ”๊ฐ€

๋ ˆ์ฝ”๋“œ ์ถ”๊ฐ€์˜ ๋น„์šฉ์ด 1์ด๋ผ๋ฉด ์ธ๋ฑ์Šค ์ถ”๊ฐ€๋น„์šฉ์€ ์•ฝ 1.5์ด๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ๋งŒ์•ฝ ์ธ๋ฑ์Šค๊ฐ€ 3๊ฐœ๋ผ๋ฉด ๋ ˆ์ฝ”๋“œ ์ถ”๊ฐ€ ๋น„์šฉ์€(1+1.5x3)์ด ๋œ๋‹ค. ๊ทธ๋ž˜์„œ ์ธ๋ฑ์Šค ์ถ”๊ฐ€ ์ž‘์—…์„ ์ฆ‰์‹œ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๊ณ  ๋ฉ”๋ชจ๋ฆฌ์— ๋ชจ์•˜๋‹ค๊ฐ€ ํ•œ๋ฒˆ์— ์“ฐ๊ธฐ๋„ ํ•œ๋‹ค.

์žฅ์  : ๋””์Šคํฌ ์“ฐ๊ธฐ ๋น„์šฉ ๊ฐ์†Œ, ์š”์ฒญ ์‹œ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋ฐ”๋กœ ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜ํ•˜๋ฏ€๋กœ ๋น ๋ฅด๋‹ค. 
๋‹จ์ : ์œ ๋‹ˆํฌ ์ธ๋ฑ์Šค์™€ ๊ฐ™์ด ์ค‘๋ณต ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด ์ฆ‰์‹œ ๋ฐ˜์˜ํ•ด์•ผ ํ•œ๋‹ค.


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

 

๋ ˆ์ฝ”๋“œ ์‚ญ์ œ

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


ํŠนํžˆ๋‚˜ MySQL์€ ๋”์šฑ ์ฃผ์˜ํ•ด์•ผํ•˜๋Š”๋ฐ, MySQL์˜ ์ž ๊ธˆ ์ค‘ ์ผ๋ถ€ ๋ ˆ์ฝ”๋“œ ์ž ๊ธˆ(๋„ฅ์ŠคํŠธ ํ‚ค๋ฝ ๋˜๋Š” ๊ฐญ ๋ฝ)์˜ ๊ฒฝ์šฐ ๊ฒ€์ƒ‰์„ ์ˆ˜ํ–‰ํ•œ ์ธ๋ฑ์Šค๋ฅผ ์ž ๊ทผ ํ›„ ํ…Œ์ด๋ธ”์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ž ๊ทผ๋‹ค. ๊ทธ๋ ‡๊ธฐ์— UPDATE ๋˜๋Š” DELETE๋ฅผ ํ•  ๋•Œ ์ ์ ˆํžˆ ์‚ฌ์šฉํ•  ์ธ๋ฑ์Šค๊ฐ€ ์—†์œผ๋ฉด ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋งŽ์€ ์ธ๋ฑ์Šค๋ฅผ ์ž ๊ทผ๋‹ค. ์‹ฌ์ง€์–ด๋Š” ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ๋ฅผ ์ž ๊ทธ๊ธฐ๋„ ํ•œ๋‹ค.

 

๋ ˆ์ฝ”๋“œ ์ˆ˜์ •

๋ ˆ์ฝ”๋“œ ์ˆ˜์ •์€ PK, ์ธ๋ฑ์Šค, ์ผ๋ฐ˜ ๊ฐ’์— ๋”ฐ๋ผ ๋‚˜๋‰œ๋‹ค. ๋จผ์ € PK๋ฅผ ์ˆ˜์ •ํ•  ๊ฒฝ์šฐ ์ตœ์†Œ 2๋ฒˆ์˜ ์ž‘์—…(delete+insert)์ด ํ•„์š”ํ•˜๋‹ค. ๋งŒ์•ฝ ์ธ๋ฑ์Šค๊ฐ€ ์žˆ๋‹ค๋ฉด ์ธ๋ฑ์Šค์—๋„ ์ถ”๊ฐ€ ์ž‘์—…์„ ํ•ด์ค˜์•ผ ํ•œ๋‹ค. ์ธ๋ฑ์Šค๋ฅผ ์ˆ˜์ •ํ•  ๊ฒฝ์šฐ ํ…Œ์ด๋ธ”๊ณผ ์ธ๋ฑ์Šค์— ์ถ”๊ฐ€ ์ž‘์—…์„ ํ•ด์•ผํ•œ๋‹ค. ๋ ˆ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•œ๋‹ค๋Š” ๊ฒƒ์€ delete+insert์ด๋‹ค. ๊ทธ๋ ‡๊ธฐ์— PK์™€ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค.

 

๋ ˆ์ฝ”๋“œ ๊ฒ€์ƒ‰

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

์ผ๋ฐ˜ ๊ฐ’์„ ์ด์šฉํ•œ ๊ฒ€์ƒ‰ - ๊ธฐ๋ณธ์ ์œผ๋กœ ํ…Œ์ด๋ธ” ํ’€์Šค์บ”์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค. B- Tree๋Š” ์ธ๋ฑ ํ‚ค ๊ฐ’์„ ๋ณ€ํ˜•ํ•˜์ง€ ์•Š๊ณ  ์ •๋ ฌ๋œ ์ƒํƒœ๋กœ ์ €์žฅํ•œ๋‹ค. (๋ฌผ๋ก  Varchar 255๋ฅผ ๋„˜์–ด๊ฐ€๋ฉด ์ž˜๋ผ์„œ ์ธ๋ฑ์Šค ๋ฅผ ๋งŒ๋“ ๋‹ค.) ๊ทธ๋ž˜์„œ =, >๋“ฑ์€ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ํ‚ค ๊ฐ’์˜ ๋’ท๋ถ€๋ถ„์„ ๊ฒ€์ƒ‰ํ•˜๊ฑฐ๋‚˜ ๋ณ€ํ˜•๋œ ๊ฐ’์œผ๋กœ ์ฟผ๋ฆฌํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ธ๋ฑ์Šค๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

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

์ฝ๊ธฐ ๋ฐฉ์‹์— ๋”ฐ๋ฅธ ์ธ๋ฑ์Šค์˜ ๋ถ„๋ฅ˜

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

๋ฒ”์œ„๊ฐ€ ๊ฒฐ์ •๋œ ์ธ๋ฑ์Šค๋ฅผ ์ฝ๋Š” ๊ฒƒ์ด๋‹ค.

  1. ์ธ๋ฑ์Šค์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๊ฐ’์„ ์ฐพ๋Š”๋‹ค.
  2. ์‹œ์ž‘ ์ง€์ ๋ถ€ํ„ฐ ํ•„์š”ํ•œ ๋งŒํผ ์ธ๋ฑ์Šค๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ์ฝ๋Š”๋‹ค.
  3. ์ฝ์–ด๋“ค์ธ ์ธ๋ฑ์Šค์™€ PK๋ฅผ ์ด์šฉํ•ด ์ตœ์ข… ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฝ์–ด์˜จ๋‹ค.(๋žœ๋คI/O)

์ธ๋ฑ์Šค์— PK๊ฐ€ ์ €์žฅ๋˜๋Š” ๊ฒƒ์€ MySQL์˜ InnoDB๊ฐ€ ํด๋Ÿฌ์Šคํ„ฐ ํ…Œ์ด๋ธ”์ด๊ธฐ ๋•Œ๋ฌธ์ด๋ฉฐ, ๋‹ค๋ฅธ DBMS์˜ ๊ฒฝ์šฐ์—๋Š” ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค.

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

์ธ๋ฑ์Šค๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ์Šค์บ”ํ•˜๋Š” ๊ฒƒ. ์ธ๋ฑ์Šค๊ฐ€ A, B, C๋กœ ๊ฑธ๋ ค์žˆ๋Š”๋ฐ ์กฐ๊ฑด์ ˆ์€ B C์— ๋Œ€ํ•ด์„œ๋งŒ ๊ฑธ๋ ค์žˆ๊ฑฐ๋‚˜ count(*)์™€ ๊ฐ™์€ ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•œ๋‹ค. ๊ทธ๋ ‡์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ ์ด๊ฒƒ์€ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•˜์ง€ ์•Š๊ณ , ๋‹ค๋งŒ ํ…Œ์ด๋ธ” ํ’€ ์Šค์บ”๋ณด๋‹ค ๋””์Šคํฌ I/O๊ฐ€ ์ ๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉํ•  ๋ฟ์ด๋‹ค.

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

์ธ๋ฑ์Šค๋ฅผ ๋“ฌ์„ฑ๋“ฌ์„ฑ ์ฝ๋Š” ๋ฐฉ์‹์ด๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ GroupBy(), MAX(), MIN()๋“ฑ์—์„œ ์‚ฌ์šฉํ•œ๋‹ค. ์•„๋ž˜ ์ฟผ๋ฆฌ๋ฅผ ๋ณด์ž.

SELECT dept_no, MIN(emp_no)
FROM dept_emp
WHERE dept_no BETWEEN 'D002' AND 'D004'GROUP BY dept_no;

์œ„ ์ฟผ๋ฆฌ์—์„œ emp_no๋Š” dept_no์— ์˜์กดํ•ด ์ •๋ ฌ๋˜๊ธฐ ๋•Œ๋ฌธ์— dept_no๊ทธ๋ฃน๋ณ„๋กœ ๋งจ ์ฒ˜์Œ emp_no๋ฅผ ์ฝ์œผ๋ฉด ๋œ๋‹ค. ์˜ตํ‹ฐ๋งˆ์ด์ €๋„ ์ด๋ฅผ ์•Œ๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜์Œ์ด ์•„๋‹Œ emp_no๋Š” ์ฝ์ง€ ์•Š๋Š”๋‹ค.

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

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

# ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๋Š” ์ฟผ๋ฆฌ
SELECTgender, birth_date
FROMemployee
WHEREbirth_date >= '1994-12-26';

์œ„ ์ฟผ๋ฆฌ๋ฅผ MySQL์ด ์•„๋ž˜์™€ ๊ฐ™์ด ์ˆ˜ํ–‰ํ•ด์ค€๋‹ค.

SELECTgender, birth_date
FROMemployee
WHEREgender = 'M'AND birth_date >= '1994-12-26';
SELECTgender, birth_date
FROMemployee
WHEREgender = 'F'AND birth_date >= '1994-12-26';

์ด์™€ ๊ฐ™์€ ์ธ๋ฑ์Šค ์Šคํ‚ต ์Šค์บ”์ด ์ˆ˜ํ–‰๋˜๋ ค๋ฉด ์•„๋ž˜ ์กฐ๊ฑด๋“ค์ด ๋งŒ์กฑ๋˜์–ด์•ผ ํ•œ๋‹ค.

  1. ์กฐํšŒ๋˜๋Š” ์ปฌ๋Ÿผ์€ ์ธ๋ฑ์Šค๋งŒ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•œ๋‹ค. (์ปค๋ฒ„๋ง ์ธ๋ฑ์Šค)
  2. ์ธ๋ฑ์Šค์˜ ์„ ํ–‰ ์ปฌ๋Ÿผ์ด WHERE์ ˆ์— ์—†๋‹ค.
  3. ์ธ๋ฑ์Šค ์„ ํ–‰ ์ปฌ๋Ÿผ์˜ ์นด๋””๋„๋ฆฌํ‹ฐ๊ฐ€ ๋‚ฎ์•„์•ผ ํ•œ๋‹ค. (์œ ๋‹ˆํฌํ•œ ๊ฐ’์ด ์ ์–ด์•ผ ํ•œ๋‹ค.)

ํ’€ ํ…Œ์ด๋ธ” ์Šค์บ”(์ธ๋ฑ์Šค ์‚ฌ์šฉ X)

์ผ๋ฐ˜์ ์œผ๋กœ ์ „์ฒด ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ๋Š” ์ธ๋ฑ์Šค์˜ ํฌ๊ธฐ๋ณด๋‹ค ํ›จ์”ฌ ํฌ๊ธฐ ๋•Œ๋ฌธ์— ํ’€ ํ…Œ์ด๋ธ” ์Šค์บ”์€ ์ƒ๋‹นํžˆ ๋งŽ์€ ๋””์Šคํฌ ์ฝ๊ธฐ๋ฅผ ํ•„์š”๋กœ ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ MySQL์€ ์—ฐ์†๋œ ํŽ˜์ด์ง€๋ฅผ ์ฝ๊ฒŒ ๋˜๋ฉด ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์“ฐ๋ ˆ๋“œ๋ฅผ ํ†ตํ•ด ๋‹ค์Œ ํŽ˜์ด์ง€๋ฅผ ๋ฏธ๋ฆฌ ์ฝ์–ด ๋ฉ”๋ชจ๋ฆฌ(๋ฒ„ํผํ’€)์— ๋„ฃ์–ด๋‘”๋‹ค. ์ด๋ฅผ ๋ฆฌ๋“œ ์–ดํ—ค๋“œ(Read Ahead)๊ธฐ๋Šฅ์ด๋ผ๊ณ  ํ•œ๋‹ค. ๋ณดํ†ต 4๊ฐœ ํ˜น์€ 8๊ฐœ์˜ ํŽ˜์ด์ง€๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด ์ตœ๋Œ€ 64๊ฐœ์˜ ํŽ˜์ด์ง€๊นŒ์ง€ ์ฝ์–ด์˜ค๋„๋ก ์ฆ๊ฐ€๋œ๋‹ค. ํ’€ ์ธ๋ฑ์Šค ์Šค์บ”์—๋„ ์ด๋Š” ๋™์ผํ•˜๊ฒŒ ์ ์šฉ๋œ๋‹ค.

์ธ๋ฑ์Šค ์‚ฌ์šฉ ์‹œ์˜ ์ฃผ์˜ ์‚ฌํ•ญ

MySQL์—๋Š” ๊ฐญ๋ฝ, ๋„ฅ์ŠคํŠธ ํ‚ค ๋ฝ, ์ž๋™ ์ฆ๊ฐ€๋ฝ ๋“ฑ ๋งŽ์€ ๋ฝ์ด ์žˆ๋Š”๋ฐ ๊ทธ ์ค‘ ๋ ˆ์ฝ”๋“œ ๋ฝ(Record Lock, Record only Lock)์ด ์ธ๋ฑ์Šค์™€ ๋ฐ€์ ‘ํ•˜๊ฒŒ ์—ฐ๊ด€๋˜์–ด์žˆ๋‹ค. ๋ ˆ์ฝ”๋“œ๋ฝ์€ ๋ง ๊ทธ๋Œ€๋กœ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ž ๊ทธ๊ธฐ ์œ„ํ•œ ๋ฝ์ธ๋ฐ MySQL์˜ ๊ฒฝ์šฐ ์‹ค์ œ ๋ ˆ์ฝ”๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ ์ธ๋ฑ์Šค๋ฅผ ์ž ๊ทผ๋‹ค๋Š” ์ ์—์„œ ๋‹ค๋ฅธ DBMS์™€ ๋‹ค๋ฅด๋‹ค.

 

์˜ˆ์‹œ๋ฅผ ๋ณด๋ฉฐ ์ดํ•ดํ•ด๋ณด๋„๋ก ํ•˜์ž. ๋งŒ์•ฝ ์„ฑ, ์ด๋ฆ„, ์ „ํ™”๋ฒˆํ˜ธ ํ…Œ์ด๋ธ”์—์„œ ์„ฑ์—๋งŒ ์ธ๋ฑ์Šค๊ฐ€ ๊ฑธ๋ ค์žˆ๋‹ค๊ณ  ํ•˜์ž. ์ด๋•Œ ์„ฑ์ด “๊น€”์ด๊ณ  ์ด๋ฆ„์ด “๋ฏผ์ง€”์ธ ์ปฌ๋Ÿผ์˜ ์ „ํ™”๋ฒˆํ˜ธ๋ฅผ ์ˆ˜์ •ํ•˜๋ ค๊ณ  ํ•  ๋•Œ ์„ฑ=“๊น€”์ด๋ผ๋Š” ์กฐ๊ฑด์œผ๋กœ ์กฐํšŒ๋œ ๋ชจ๋“  ์ธ๋ฑ์Šค์— ๋ฝ์„ ๊ฑด๋‹ค. ๋งŒ์ผ ์„ฑ์—๋„ ์ธ๋ฑ์Šค๊ฐ€ ์—†๋‹ค๋ฉด ํ…Œ์ด๋ธ”์„ ํ’€์Šค์บ”ํ•˜๋ฉฐ ๋ ˆ์ฝ”๋“œ๋ฅผ ๊ฐฑ์‹ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ๋ฅผ ์ž ๊ทธ๊ฒŒ ๋œ๋‹ค.

๋ ˆ์ฝ”๋“œ๋ฝ์€ ํด๋Ÿฌ์Šคํ„ฐ๋ง ์ธ๋ฑ์Šค(PK) ๋˜๋Š” ์œ ๋‹ˆํฌ ์ธ๋ฑ์Šค๋ฅผ ์ด์šฉํ•ด ๋ณ€๊ฒฝ์„ ํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ๋œ๋‹ค. ๊ทธ ์™ธ์—๋Š”?

 

๋Œ“๊ธ€