DB

[DB] DB ์ธ๋ฑ์Šค๋ž€?

DAHLIA CHOI 2024. 2. 26. 13:15

๐Ÿซง DB ์ธ๋ฑ์Šค๋ž€?

 

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ฒ€์ƒ‰ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๋งํ•œ๋‹ค.

→ ์ฑ…์—์„œ ๋ชฉ์ฐจ๋ฅผ ๋ณด๋ฉด ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ๋งŒ์œผ๋กœ ์›ํ•˜๋Š” ๋‚ด์šฉ์˜ ๋ถ€๋ถ„์„ ํ•œ ๋ฒˆ์— ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๊ฒ€์ƒ‰์„ ๋น ๋ฅด๊ณ  ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๋Š” ์˜๋ฏธ์ด๋‹ค



๐Ÿ“ƒ Full Table Scan

full table scan์ด๋ž€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์กฐํšŒํ•  ๋•Œ where๋ฌธ์„ ์ด์šฉํ•ด์„œ ํ…Œ์ด๋ธ”์˜ ์ „์ฒด๋ฅผ ์กฐ๊ฑด๊ณผ ๋น„๊ตํ•ด์•ผ๋˜๋Š” ์ž‘์—…์ด๋‹ค.

๊ทธ๋ž˜์„œ ๊ต‰์žฅํžˆ ๋ฒˆ๊ฑฐ๋กญ๊ณ  ์‹œ๊ฐ„์ด ์˜ค๋ž˜๊ฑธ๋ฆผ!

 

โš™๏ธ B-Tree

B-Tree๋Š” Balanced Tree์˜ ์ค„์ž„๋ง์ด๋‹ค.

MySQL์˜ DB ์—”์ง„์ธ InnoDB๋Š” B+Tree๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ์œผ๋ฉฐ ์ด๊ฒƒ์€ B-Tree์˜ ํ™•์žฅ๋œ ๊ฐœ๋…์ด๋‹ค.

B-Tree

B-Tree๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ •๋ ฌ๋œ ์ƒํƒœ๋กœ ์œ ์ง€๋˜์–ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ์ด๋‹ค.

์ฐจ๋ก€๋Œ€๋กœ ๋ฃจํŠธ๋…ธ๋“œ, ๋ธŒ๋žœ์น˜ ๋…ธ๋“œ, ๋ฆฌํ”„๋…ธ๋“œ๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ๋‹ค.

  • B-Tree๋Š” ํ•œ ๋…ธ๋“œ ๋‹น ์ž์‹ ๋…ธ๋“œ๊ฐ€ 2๊ฐœ ์ด์ƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • key๊ฐ’์„ ์ด์šฉํ•ด ์ฐพ๊ณ ์ž ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•ด ์ฐพ๋Š”๋‹ค.
  • ๊ท ํ˜•์žกํžŒ ํŠธ๋ฆฌ์ด๋‹ค.
  • ์ •๋ ฌ์„ ์‚ฌ์šฉํ•œ๋‹ค.

ํ•ญ์ƒ ๊ท ํ˜•์žกํžŒ ํŠธ๋ฆฌ ๋ชจ์–‘์„ ์œ ์ง€ํ•˜๊ณ , ์ •๋ ฌ์„ ์ด์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒˆ๋กœ์šด ๊ฐ’์ด ๋“ค์–ด์™”์„ ๊ฒฝ์šฐ ์ •๋ ฌ ์ƒํƒœ์™€ ๊ท ํ˜•์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ ํŠธ๋ฆฌ์˜ ๋ชจ์–‘์„ ๋ฐ”๊ฟ”์•ผ ํ•œ๋‹ค.

๐Ÿ‘‰ ๋”ฐ๋ผ์„œ ์“ฐ๊ธฐ ์„ฑ๋Šฅ์€ ์ค„์–ด๋“ค๊ณ  ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ์€ ๋งค์šฐ ์˜ฌ๋ผ๊ฐ„๋‹ค!!

B+Tree

B+Tree๋Š” B-Tree์˜ ํ™•์žฅ ๊ฐœ๋…์œผ๋กœ B-Tree์˜ ๊ฒฝ์šฐ์—๋Š” ๋ธŒ๋žœ์น˜ ๋…ธ๋“œ์— key์™€ data๋ฅผ ๋ชจ๋‘ ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค๋ฉด B+Tree์—๋Š” ๋ธŒ๋žœ์น˜๋…ธ๋“œ์— key๋งŒ ๋‹ด์•„๋‘๊ณ  ๋ฆฌํ”„๋…ธ๋“œ์—๋งŒ key์™€ data๋ฅผ ์ €์žฅํ•œ๋‹ค.

์—ฌ๊ธฐ์„œ ๋ฆฌํ”„๋…ธ๋“œ๋ผ๋ฆฌ๋Š” linked list๋กœ ์—ฐ๊ฒฐ๋˜์–ด์žˆ๋‹ค. 

์žฅ์ 

  • ๋ฆฌํ”„ ๋…ธ๋“œ๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์•„๋‘๊ณ  ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ™•๋ณดํ•จ์œผ๋กœ์จ ๋” ๋งŽ์€ key๋ฅผ ์ˆ˜์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํ•˜๋‚˜์˜ ๋…ธ๋“œ์— ์—ฌ๋Ÿฌ key๋ฅผ ๋‹ด์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํŠธ๋ฆฌ์˜ ๋†’์ด๋Š” ๋” ๋‚ฎ์•„์ง„๋‹ค → cache hit๋ฅผ ๋†’์ผ ์ˆ˜ ์žˆ์Œ (cache hit๋ž€ CPU๊ฐ€ ์ฐธ์กฐํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์บ์‹œ์— ์กด์žฌํ•˜๊ณ  ์žˆ์„ ๊ฒฝ์šฐ๋ฅผ ๋งํ•œ๋‹ค.)
  • B+Tree์˜ ๊ฒฝ์šฐ์—๋Š” ๋ฆฌํ”„๋…ธ๋“œ์— ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•œ ๋ฒˆ์˜ ์„ ํ˜•ํƒ์ƒ‰๋งŒ ํ•˜๋ฉด ๋ผ์„œ B-Tree๋ณด๋‹ค ๋น ๋ฅด๋‹ค.



โš™๏ธ์ธ๋ฑ์Šค ๊ตฌ์กฐ

์ธ๋ฑ์Šค๋Š” ๋ฌผ๋ฆฌ์ /๋…ผ๋ฆฌ์ ์œผ๋กœ ํ…Œ์ด๋ธ”ํ•˜๊ณ  ๋…๋ฆฝ์ ์ด๋‹ค.

ํ…Œ์ด๋ธ”์€ ์ปฌ๋Ÿผ๊ณผ ๋ฐ์ดํ„ฐ๊ฐ€ ์ •๋ ฌ๋˜์ง€ ์•Š๊ณ  ์ž…๋ ฅ๋œ ์ˆœ์„œ๋Œ€๋กœ ๋“ค์–ด๊ฐ€์ง€๋งŒ ์ธ๋ฑ์Šค๋Š” key์ปฌ๋Ÿผ(์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ผ๊ณ  ์ง€์ •ํ•œ ์ปฌ๋Ÿผ์˜ ๊ฐ’)๊ณผ rowid์ปฌ๋Ÿผ ๋‘ ๊ฐœ๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ์œผ๋ฉฐ ์ •๋ ฌ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

MySQL์—์„œ ํ…Œ์ด๋ธ” ์ƒ์„ฑํ•  ๋•Œ ์•„๋ž˜์˜ ์„ธ๊ฐœ ํŒŒ์ผ์ด ์ƒ์„ฑ๋œ๋‹ค.

  • FRM : ํ…Œ์ด๋ธ” ๊ตฌ์กฐ ์ €์žฅ ํŒŒ์ผ
  • MYD : ์‹ค์ œ ๋ฐ์ดํ„ฐ ํŒŒ์ผ
  • MYI : ์ธ๋ฑ์Šค ์ •๋ณด ํŒŒ์ผ (์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ƒ์„ฑ๋œ๋‹ค)

→ MYI ๋””์Šคํฌ ๊ณต๊ฐ„์€ ์‹ค์ œ ํ…Œ์ด๋ธ”์„ ์ €์žฅํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๋””์Šคํฌ ๊ณต๊ฐ„๋ณด๋‹ค ์ž‘์€๋ฐ ๋ณดํ†ต ์ธ๋ฑ์Šค๋Š” ํ…Œ์ด๋ธ”์˜ ์„ธ๋ถ€ํ•ญ๋ณต์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

โš™๏ธ์ž‘๋™ ์›๋ฆฌ

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

์ด๋•Œ, ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” WHERE์ ˆ์˜ ์ปฌ๋Ÿผ์ด ์ธ๋ฑ์Šค๊ฐ€ ๋งŒ๋“ค์–ด์ ธ์žˆ๋Š”์ง€ ํ™•์ธ ํ›„ ์ธ๋ฑ์Šค์— ๋จผ์ € ๊ฐ€์„œ 7902์ •๋ณด๊ฐ€ ์–ด๋–ค rowid๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธ ํ›„ rowid์— ์žˆ๋Š” ๋ธ”๋ก๋งŒ ์ฐพ์•„๊ฐ€์„œ DB๋ฒ„ํผ ์บ์‹œ์— ๋ณต์‚ฌํ•œ๋‹ค.

์—†์œผ๋ฉด, ๋‹ค ๋ณต์‚ฌํ•œ ํ›„ ํ•˜๋‚˜ํ•˜๋‚˜ ์ฐพ์Œ

โš™๏ธ ์ธ๋ฑ์Šค ๋ฐฉ์‹

Clustered Index

์ฑ…์œผ๋กœ ๋น„์œ ํ•˜์ž๋ฉด ํŽ˜์ด์ง€๋ฅผ ์•Œ๊ณ ์žˆ์–ด์„œ ๋ฐ”๋กœ ํ•ด๋‹น ํŽ˜์ด์ง€๋ฅผ ํŽผ์น˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์Œ

→ ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์ •๋œ ์ปฌ๋Ÿผ์— ๋Œ€ํ•ด ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์žฌ๋ฐฐ์—ดํ•œ๋‹ค. 

ํ‚ค ๊ฐ’๊ณผ ๋ฐ์ดํ„ฐ ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ๋กœ ๊ตฌ๋ถ„ํ•˜๊ณ , ๊ฒ€์ƒ‰ํ•˜๊ณ ์žํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ํ‚ค ๊ฐ’์œผ๋กœ ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ๋ฅผ ๊ฒ€์ƒ‰ํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๋Š”๋‹ค.

  • ํ…Œ์ด๋ธ”์—์„œ ์ธ๋ฑ์Šค๋ฅผ ๊ฑธ๋ฉด ๊ฐ€์žฅ ํšจ์œจ์ ์ผ ๊ฒƒ ๊ฐ™์€ ์นผ๋Ÿผ์„ cluster index๋กœ ์ง€์ •ํ•œ๋‹ค. 

 

Non-Clustered Index

์ฑ…์œผ๋กœ ๋น„์œ ํ•˜์ž๋ฉด ๋ชฉ์ฐจ์—์„œ ์ฐพ๊ณ ์žํ•˜๋Š” ๋‚ด์šฉ์˜ ํŽ˜์ด์ง€๋ฅผ ์ฐพ๊ณ ๋‚˜์„œ ํ•ด๋‹น ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ

  • ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐฐ์—ดํ•˜์ง€ ์•Š์€ ์ƒํƒœ๋กœ ๋ฐ์ดํ„ฐ ํŽ˜์ด์ง€๊ฐ€ ๊ตฌ์„ฑ๋œ๋‹ค.

 

  • ๋ฐ์ดํ„ฐ ํŽ˜์ด์ง€๋ฅผ ๊ฑด๋“ค์ด์ง€ ์•Š๊ณ  ๋ณ„๋„์˜ ์žฅ์†Œ์— ์ธ๋ฑ์Šค ํŽ˜์ด์ง€๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  • ์—ฌ๊ธฐ์„œ ๊ตฌ๋ถ„ ๊ธฐ์ค€์„ ๋‹ค๋ฅด๊ฒŒ ๋ฐ”๊พธ๋”๋ผ๋„ ๋ฐ์ดํ„ฐํŽ˜์ด์ง€๋Š” ์›€์ง์ด์ง€ ์•Š๊ณ  ๊ทธ๋Œ€๋กœ ์กด์žฌํ•˜๊ฒŒ ๋จ



์ธ๋ฑ์Šค๋ฅผ ์–ด๋””์— ํ™œ์šฉํ•˜๋ฉด ์ข‹์„๊นŒ?

  • where, join ์กฐ๊ฑด์— ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ์นผ๋Ÿผ
  • insert, update, delete์ด ์ ๊ฒŒ ๋ฐœ์ƒํ•˜๋Š” ์ปฌ๋Ÿผ
  • ์ค‘๋ณต๋„๊ฐ€ ๋‚ฎ์€ ์ปฌ๋Ÿผ
  • ๋ฒ”์œ„ ๊ฒ€์ƒ‰์ด ์ ์€ ์ปฌ๋Ÿผ
  • ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์€ ํ…Œ์ด๋ธ”