10 min read

Real MySQL 8.0 8์žฅ ์ธ๋ฑ์Šค

Table of Contents

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

๋žœ๋ค I/O, ์ˆœ์ฐจ I/O ๋‘ ๊ฐ€์ง€ ๋””์Šคํฌ ์ฝ๊ธฐ ๋ฐฉ์‹์„ ๊ฐ„๋‹จํžˆ ์‚ดํŽด ๋ณด์ž.

3๊ฐœ์˜ ํŽ˜์ด์ง€๋ฅผ ๋””์Šคํฌ์— ๊ธฐ๋กํ•˜๊ธฐ ์œ„ํ•ด, ๋žœ๋ค I/O์™€ ์ˆœ์ฐจ I/O๋Š” ๋ช‡ ๋ฒˆ์˜ ์‹œ์Šคํ…œ ์ฝœ์„ ์š”์ฒญํ• ๊นŒ? ์ˆœ์ฐจ I/O๋Š” ์‹œ์Šคํ…œ ์ฝœ์„ ํ•œ ๋ฒˆ๋งŒ ์š”์ฒญํ•ด๋„ ๋˜์ง€๋งŒ ๋žœ๋ค I/O๋Š” ์ด 3๋ฒˆ ์š”์ฒญํ•ด์•ผ ํ•œ๋‹ค. ์ˆœ์ฐจ I/O๋Š” ๋””์Šคํฌ ํ—ค๋“œ๋ฅผ ํ•œ ๋ฒˆ ์›€์ง์ด์ง€๋งŒ, ๋žœ๋ค I/O๋Š” 3๋ฒˆ ์›€์ง์ธ๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ฑฐ๋‚˜ ์“ฐ๋Š” ์„ฑ๋Šฅ์€ ๋””์Šคํฌ ํ—ค๋“œ๋ฅผ ์–ผ๋งˆ๋‚˜ ์ ๊ฒŒ ์›€์ง์ด๋А๋ƒ๊ฐ€ ๊ฒฐ์ •ํ•˜๊ฒŒ ๋œ๋‹ค.

์—ฌ๋Ÿฌ ๋ฒˆ์˜ ๋žœ๋ค I/O ์š”์ฒญ์ด ๋ถ€ํ•˜๋ฅผ ์ผ์œผํ‚ค๊ธฐ ๋•Œ๋ฌธ์—, MySQL์€ ์ด๋Ÿฐ ์š”์ฒญ๋“ค์„ ๋ชจ์•„ ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌํ•˜์—ฌ ๋””์Šคํฌ ๋ถ€ํ•˜๋ฅผ ์ค„์ด๋Š” ๊ทธ๋ฃน ์ปค๋ฐ‹, ๋ฐ”์ด๋„ˆ๋ฆฌ ๋กœ๊ทธ ๋ฒ„ํผ, InnoDB ๋กœ๊ทธ ๋ฒ„ํผ ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

์ฟผ๋ฆฌ๋ฅผ ํŠœ๋‹ํ•ด์„œ ๋žœ๋ค I/O๋ฅผ ์ˆœ์ฐจ I/O๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์€ ์‰ฝ์ง€ ์•Š๊ณ , ๋žœ๋ค I/O๋ฅผ ์ตœ๋Œ€ํ•œ ์ค„์ด๋Š” ๊ฒƒ์ด ์ฟผ๋ฆฌ ํŠœ๋‹์˜ ๋ชฉํ‘œ๊ฐ€ ๋œ๋‹ค.

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

์ฑ…์„ ์‚ฌ์„œ ๋’ท๋ถ€๋ถ„์„ ํŽผ์ณ ๋ณด๋ฉด โ€˜์ฐพ์•„๋ณด๊ธฐโ€™ ๋ผ๋Š” ๋ถ€๋ถ„์ด ์žˆ๋‹ค. ๋‹จ์–ด์™€ ํ•ด๋‹น ๋‹จ์–ด๊ฐ€ ๋‚˜์˜ค๋Š” ํŽ˜์ด์ง€๊ฐ€ key-value pair๋ฅผ ์ด๋ฃจ๊ณ  ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‹จ์–ด๊ฐ€ ์ •๋ ฌ๋˜์–ด ์žˆ๋‹ค. ์ฑ…์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ฝ์œผ๋ฉด์„œ ํ•ด๋‹น ๋‹จ์–ด๊ฐ€ ๋‚˜์˜ค๋Š” ๋ถ€๋ถ„์„ ์ฐพ๋Š” ๊ฒƒ ๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฅด๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

DBMS๋„ ๋น„์Šทํ•˜๋‹ค. ์นผ๋Ÿผ์˜ ๊ฐ’๊ณผ ํ•ด๋‹น ๋ ˆ์ฝ”๋“œ๊ฐ€ ์ €์žฅ๋œ ์ฃผ์†Œ๋ฅผ key-value pair๋ฅผ ์ด๋ฃจ๋„๋ก ํ•˜๊ณ , ์นผ๋Ÿผ์˜ ๊ฐ’์„ ์ •๋ ฌํ•ด์„œ ๋ณด๊ด€ํ•ด ๋‘”๋‹ค.

์ฆ‰, ์ธ๋ฑ์Šค๋Š” SortedList์ด๋‹ค. ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฝ์ž…๋˜๋ฉด, ์ •๋ ฌ์„ ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ArrayList๋ณด๋‹ค ์‚ฝ์ž… ์†๋„๊ฐ€ ๋А๋ฆฌ์ง€๋งŒ, ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๋Š” ์†๋„๋Š” ํ›จ์”ฌ ๋น ๋ฅด๋‹ค. ๋”ฐ๋ผ์„œ ์ธ๋ฑ์Šค๊ฐ€ ๋งŽ์€ ํ…Œ์ด๋ธ”์€ INSERT, UPDATE, DELETE๊ฐ€ ๋А๋ ค์ง„๋‹ค. ๋Œ€์‹  SELECT๋Š” ํ›จ์”ฌ ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

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

์ธ๋ฑ์Šค๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์ค‘๋ณต ๊ฐ’ ํ—ˆ์šฉ ์—ฌ๋ถ€ ๋“ฑ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๊ธฐ์ค€์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค. ์ง€๊ธˆ๋ถ€ํ„ฐ Key == Index ๋ผ๊ณ  ์ƒ๊ฐํ•˜์ž.

์šฐ์„  ์—ญํ• ๋ณ„๋กœ ๊ตฌ๋ถ„ํ•ด ๋ณด๋ฉด Primary Key ๊ทธ๋ฆฌ๊ณ  Secondary Key๋กœ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋‹ค. PK๋Š” ํ•ด๋‹น ๋ ˆ์ฝ”๋“œ๋ฅผ ๋Œ€ํ‘œํ•˜๋Š” ๊ฐ’์œผ๋กœ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๊ณ , NULL๋„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. PK๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ์ธ๋ฑ์Šค๋Š” ๋ณด์กฐ ํ‚ค์ด๋‹ค.

์•Œ๊ณ ๋ฆฌ์ฆ˜๋ณ„๋กœ ๋‚˜๋ˆŒ ๊ฒฝ์šฐ ๋Œ€ํ‘œ์ ์œผ๋กœ ๋‘ ๊ฐ€์ง€ ์ธ๋ฑ์Šค๊ฐ€ ์žˆ๋‹ค. B-Tree ์ธ๋ฑ์Šค, ๊ทธ๋ฆฌ๊ณ  Hash ์ธ๋ฑ์Šค์ด๋‹ค. B-Tree ์ธ๋ฑ์Šค๋Š” ์นผ๋Ÿผ์˜ ์›๋ž˜ ๊ฐ’์„ ์ด์šฉํ•ด ์ธ๋ฑ์‹ฑํ•˜๊ณ , Hash ์ธ๋ฑ์Šค๋Š” ์นผ๋Ÿผ์˜ ๊ฐ’์— ํ•ด์‹œ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ์ธ๋ฑ์‹ฑํ•œ๋‹ค. ๋•Œ๋ฌธ์— Hash ์ธ๋ฑ์Šค๋Š” ๋ถ€๋ถ„ ์ผ์น˜๋‚˜ ๋ฒ”์œ„ ๊ฒ€์ƒ‰์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๋‹ค.

๋ฐ์ดํ„ฐ์˜ ์ค‘๋ณต ์—ฌ๋ถ€๋กœ ๋‚˜๋ˆ„๋ฉด Unique ์ธ๋ฑ์Šค, Non-Unique ์ธ๋ฑ์Šค๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค. Unique ํ•˜๋‹ค๋Š” ์‚ฌ์‹ค์€ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์•„์ฃผ ์ค‘์š”ํ•œ ์‚ฌ์‹ค์ด๋‹ค. Equal ์กฐ๊ฑด์œผ๋กœ ๊ฒ€์ƒ‰ํ–ˆ์„ ๋•Œ ํ•˜๋‚˜์˜ ๊ฒฐ๊ณผ๋ฅผ ์ฐพ์œผ๋ฉด ๋” ์ด์ƒ ์ฐพ์ง€ ์•Š์•„๋„ ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ „๋ฌธ ๊ฒ€์ƒ‰ ์ธ๋ฑ์Šค, ๊ณต๊ฐ„ ๊ฒ€์ƒ‰ ์ธ๋ฑ์Šค ๋“ฑ๋“ฑ ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ์ธ๋ฑ์Šค๊ฐ€ ์กด์žฌํ•œ๋‹ค.

3. B-Tree ์ธ๋ฑ์Šค

B-Tree๋Š” ๊ฐ€์žฅ ์ค‘์š”ํ•˜๊ณ , ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์ธ๋ฑ์Šค์ด๋‹ค. B-Tree์˜ โ€˜Bโ€™๋Š” โ€œBalancedโ€์ด๋‹ค. ์ธ๋ฑ์Šค๋กœ ์„ค์ •ํ•œ ์›๋ณธ ๊ฐ’์„ ๋ณ€ํ˜•์‹œํ‚ค์ง€ ์•Š๊ณ , ์ •๋ ฌ๋œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•œ๋‹ค.

Real MySQL 8.0 8์žฅ ์ธ๋ฑ์Šค-1712426195346.jpeg

์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ณ€ํ˜•์ด ์กด์žฌํ•œ๋‹ค.

Real MySQL 8.0 8์žฅ ์ธ๋ฑ์Šค-1712427542357.jpeg

Real MySQL 8.0 8์žฅ ์ธ๋ฑ์Šค-1712428256696.jpeg

Real MySQL 8.0 8์žฅ ์ธ๋ฑ์Šค-1712426289895.jpeg

InnoDB๋Š” B+Tree ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค. ๋ฆฌํ”„ ๋…ธ๋“œ์—๋งŒ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋œ๋‹ค. ์ฑ…์—์„œ๋Š” B-Tree ๋ผ๊ณ  ๋ฌถ์–ด์„œ ๋ถ€๋ฅด๊ณ  ์žˆ๋‹ค.

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

Real MySQL 8.0 8์žฅ ์ธ๋ฑ์Šค-1712427633811.jpeg

B-Tree๋Š” ๋ฃจํŠธ ๋…ธ๋“œ - ๋ธŒ๋žœ์น˜ ๋…ธ๋“œ - ๋ฆฌํ”„ ๋…ธ๋“œ์˜ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๋ฐ˜๋“œ์‹œ ์ตœ์ƒ์œ„์— ํ•˜๋‚˜์˜ ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์ตœํ•˜์œ„์˜ ๋ฆฌํ”„ ๋…ธ๋“œ๋“ค์€ ์‹ค์ œ ๋ฐ์ดํ„ฐ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฐพ์•„๊ฐ€๊ธฐ ์œ„ํ•œ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๋‹ค๋ฅธ ๋…ธ๋“œ๋“ค์€ ํ•˜์œ„ ๋…ธ๋“œ๋“ค์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค(B+Tree).

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

B-Tree ์ธ๋ฑ์Šค ํ‚ค ์ถ”๊ฐ€ ๋ฐ ์‚ญ์ œ

B+Tree Visualization

์‚ฝ์ž…

Real MySQL 8.0 8์žฅ ์ธ๋ฑ์Šค-1712428048683.jpeg

์ƒˆ๋กœ์šด ํ‚ค ๊ฐ’์ด ํŠธ๋ฆฌ์— ์ถ”๊ฐ€๋  ๋•Œ, ํ‚ค ๊ฐ’์„ ์ด์šฉํ•ด ํŠธ๋ฆฌ์—์„œ ์ €์žฅ๋  ์œ„์น˜๋ฅผ ์ฐพ์•„์•ผ ํ•œ๋‹ค. ์ €์žฅ๋  ์œ„์น˜๊ฐ€ ๊ฒฐ์ •๋˜๋ฉด ํ‚ค ๊ฐ’๊ณผ ๋ ˆ์ฝ”๋“œ์˜ ์ฃผ์†Œ ์ •๋ณด๋ฅผ ํŠธ๋ฆฌ์˜ ๋ฆฌํ”„ ๋…ธ๋“œ์— ์ €์žฅํ•œ๋‹ค. ์ด ๋•Œ ๋ฆฌํ”„ ๋…ธ๋“œ๊ฐ€ ๊ฝ‰ ์ฐจ์„œ ๊ณต๊ฐ„์ด ๋ถ€์กฑํ•œ ๊ฒฝ์šฐ, ๋…ธ๋“œ๋ฅผ ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆˆ๋‹ค. ๋ถ„ํ•  ์‹œ ์ค‘๊ฐ„๊ฐ’์ด ๋ถ€๋ชจ ๋…ธ๋“œ๋กœ ๋ณต์‚ฌ๋œ๋‹ค.

์ธ๋ฑ์Šค ์ถ”๊ฐ€๋กœ ์ธํ•ด INSERT, UPDATE ๋ฌธ์žฅ์ด ์–ด๋–ค ์˜ํ–ฅ์„ ๋ฐ›์„ ์ง€ ์˜ˆ์ธกํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. ํ…Œ์ด๋ธ”์— ๋ ˆ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋น„์šฉ์„ 1์ด๋ผ๊ณ  ํ–ˆ์„ ๋•Œ, ์ธ๋ฑ์Šค ํ•˜๋‚˜๋‹น 1.5์˜ ๋น„์šฉ์ด ์ถ”๊ฐ€๋กœ ๋“ ๋‹ค๊ณ  ์˜ˆ์ธกํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ธ๋ฑ์Šค๊ฐ€ 3๊ฐœ ๊ฑธ๋ ค ์žˆ๋Š” ํ…Œ์ด๋ธ”์— ๋ ˆ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐ ๋“œ๋Š” ๋น„์šฉ์€ 1+(1.5ร—3)=5.51 + (1.5 \times 3) = 5.5๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค.

์ด ๋น„์šฉ์˜ ๋Œ€๋ถ€๋ถ„์€ ๋””์Šคํฌ I/O์ด๋‹ค.

์‚ญ์ œ

Real MySQL 8.0 8์žฅ ์ธ๋ฑ์Šค-1712428297149.jpeg

์‚ญ์ œํ•  ํ‚ค๊ฐ€ ์žˆ๋Š” ๋ฆฌํ”„ ๋…ธ๋“œ๋ฅผ ์ฐพ๊ณ , ํ•ด๋‹น ํ‚ค๋ฅผ ์‚ญ์ œํ•œ๋‹ค. ์ด ๋•Œ ๋ฆฌํ”„ ๋…ธ๋“œ์— ์กด์žฌํ•˜๋Š” ํ‚ค ๊ฐœ์ˆ˜๊ฐ€ M/2โˆ’1M/2 - 1๊ฐœ๊ฐ€ ๋˜๋ฉด, ํ˜•์ œ ๋…ธ๋“œ์—์„œ ํ‚ค๋ฅผ ๋นŒ๋ ค ์˜ค๊ฑฐ๋‚˜ ํ•ฉ์ณ์„œ ํŠธ๋ฆฌ์˜ ํŠน์„ฑ์„ ๋งŒ์กฑ์‹œํ‚จ๋‹ค.

InnoDB๋Š” ์‹ค์ œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฆ‰์‹œ ์‚ญ์ œํ•˜์ง€ ์•Š๊ณ , ํ•ด๋‹น ๊ณต๊ฐ„์„ ์žฌํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์‚ญ์ œ๋˜์—ˆ๋‹ค๋Š” ํ‘œ์‹œ๋งŒ ํ•œ๋‹ค(Lazy Deletion).

๋ณ€๊ฒฝ

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

๊ฒ€์ƒ‰

UPDATE๋‚˜ DELETE๋ฅผ ์œ„ํ•ด ํ‚ค๋ฅผ ๊ฒ€์ƒ‰ํ•ด์•ผ ํ•œ๋‹ค. ์ด ๋•Œ ํŠธ๋ฆฌ๋ฅผ ํƒ์ƒ‰ํ•˜๋ฉฐ ํ‚ค๋ฅผ ์ฐพ๋Š”๋‹ค. 100% ์ผ์น˜, ์ „๋ฐฉ ์ผ์น˜, ๋ถ€๋“ฑํ˜ธ ์—ฐ์‚ฐ์— ์ธ๋ฑ์Šค๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค. ํ•จ์ˆ˜ ์—ฐ์‚ฐ ๋“ฑ์œผ๋กœ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๋ฉด ์ธ๋ฑ์Šค๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์—†๋‹ค.

InnoDB ํ…Œ์ด๋ธ”์—์„œ ์ง€์›ํ•˜๋Š” ๋ ˆ์ฝ”๋“œ ๋ฝ, ๋„ฅ์ŠคํŠธ ํ‚ค ๋ฝ์ด ๊ฒ€์ƒ‰์„ ์ˆ˜ํ–‰ํ•œ ์ธ๋ฑ์Šค๋ฅผ ์ž ๊ทผ ํ›„ ํ…Œ์ด๋ธ”์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ž ๊ทธ๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค. ์ธ๋ฑ์Šค๊ฐ€ ์ ์ ˆํžˆ ์„ค์ •๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด, UPDATE, DELETE๋ฅผ ์ˆ˜ํ–‰ํ•  ๋•Œ ํ…Œ์ด๋ธ” ์ „์ฒด๊ฐ€ ์ž ๊ธฐ๋Š” ์ฐธ์‚ฌ๊ฐ€ ์ผ์–ด๋‚  ์ˆ˜ ์žˆ์œผ๋‹ˆ ์กฐ์‹ฌํ•ด์•ผ ํ•œ๋‹ค.

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

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

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

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

InnoDB ํŽ˜์ด์ง€ ์‚ฌ์ด์ฆˆ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ 16KB์ด๋‹ค. ์ธ๋ฑ์Šค ํ‚ค ๊ฐ’์ด 16๋ฐ”์ดํŠธ, ์ž์‹ ๋…ธ๋“œ ์ฃผ์†Œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ณต๊ฐ„์ด 12๋ฐ”์ดํŠธ๋ผ๊ณ  ํ•˜๋ฉด, ํŽ˜์ด์ง€ ํ•˜๋‚˜ ๋‹น 16ร—1024/(16+12)=58516 \times 1024 / (16 + 12) = 585 ๊ฐœ์˜ ํ‚ค๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. ์ธ๋ฑ์Šค ํ‚ค ๊ฐ’์ด 16๋ฐ”์ดํŠธ๊ฐ€ ์•„๋‹Œ 32๋ฐ”์ดํŠธ๊ฐ€ ๋œ๋‹ค๋ฉด, ํŽ˜์ด์ง€๋‹น ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ์ธ๋ฑ์Šค ํ‚ค๊ฐ€ ์ค„์–ด๋“ค ๊ฒƒ์ด๋‹ค.

์ด๋ ‡๊ฒŒ ๋˜๋ฉด ๋””์Šคํฌ์— ๋” ์—ฌ๋Ÿฌ ๋ฒˆ ์ ‘๊ทผํ•ด์•ผ ํ•œ๋‹ค.

B-Tree ๊นŠ์ด

์ธ๋ฑ์Šค ํ‚ค ๊ฐ’์ด 16๋ฐ”์ดํŠธ, B-Tree ๊นŠ์ด๊ฐ€ 3์ธ ๊ฒฝ์šฐ 5853=200,201,625585^{3} = 200,201,625๊ฐœ์˜ ํ‚ค ๊ฐ’์„ ๋‹ด์„ ์ˆ˜ ์žˆ์ง€๋งŒ, 32๋ฐ”์ดํŠธ๋กœ ๋Š˜์–ด๋‚˜๋ฉด ์•ฝ 5์ฒœ๋งŒ๊ฐœ์ •๋„๋กœ ์ค„์–ด๋“ ๋‹ค.

์ธ๋ฑ์Šค ํ‚ค ๊ฐ’์˜ ํฌ๊ธฐ๋Š” ๊ฐ€๋Šฅํ•˜๋ฉด ์ž‘์€ ๊ฒŒ ์ข‹๋‹ค.

์‹ค์ œ๋กœ B-Tree์˜ ๊นŠ์ด๊ฐ€ 5๋‹จ๊ณ„ ์ด์ƒ์ด ๋˜๋Š” ๊ฒฝ์šฐ๋Š” ๊ฑฐ์˜ ์—†๋‹ค.

๊ธฐ์ˆ˜์„ฑ

Cardinality๋Š” ํ‚ค ๊ฐ’ ์ค‘ ๊ณ ์œ ํ•œ ๊ฐ’์˜ ์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค. Cardinality๊ฐ€ ๋†’์„์ˆ˜๋ก ์ธ๋ฑ์Šค ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ์ด ์ข‹์•„์ง„๋‹ค.

์ฝ์–ด์•ผ ํ•˜๋Š” ๋ ˆ์ฝ”๋“œ์˜ ์ˆ˜

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

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

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

SELECT * FROM employees WHERE first_name BETWEEN 'Ebbe' AND 'GAD';

๋ผ๋Š” ์ฟผ๋ฆฌ๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•ด๋ณด์ž. ์ธ๋ฑ์Šค ๋ ˆ์ธ์ง€ ์Šค์บ”์€ ๊ฒ€์ƒ‰ํ•ด์•ผ ํ•  ์ธ๋ฑ์Šค์˜ ๋ฒ”์œ„๊ฐ€ ๊ฒฐ์ •๋์„ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ๋ฃจํŠธ ๋…ธ๋“œ๋ถ€ํ„ฐ ๋น„๊ตํ•˜๋ฉฐ ํ•„์š”ํ•œ ๋ ˆ์ฝ”๋“œ์˜ ์‹œ์ž‘ ์ง€์ ์„ ์ฐพ๊ณ , ๊ฑฐ๊ธฐ์„œ๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ ์ฝ๊ณ , ์Šค์บ”์„ ๋ฉˆ์ถฐ์•ผ ํ•  ์œ„์น˜์— ๋‹ค๋‹ค๋ฅด๋ฉด ์ง€๊ธˆ๊นŒ์ง€ ์ฝ์€ ๋ ˆ์ฝ”๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด ๋œ๋‹ค.

๋ ˆ์ฝ”๋“œ์˜ ์ฃผ์†Œ๊ฐ€ ์ ํ˜€ ์žˆ๊ณ , ์‹ค์ œ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ๊ฐ€์ ธ ์™€์•ผ ํ•  ๋•Œ๋Š” ๋žœ๋ค I/O๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ๋•Œ๋Š” ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ์ฝ๋Š” ๊ฒƒ ๋ณด๋‹ค ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ์ฝ๋Š” ๊ฒƒ์ด ํšจ์œจ์ ์ด๋‹ค.

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

์ธ๋ฑ์Šค์˜ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๋ชจ๋‘ ์ฝ๋Š” ๋ฐฉ์‹์„ ์ธ๋ฑ์Šค ํ’€ ์Šค์บ”์ด๋ผ๊ณ  ํ•œ๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ ์ฟผ๋ฆฌ ์กฐ๊ฑด์ ˆ์— ์‚ฌ์šฉ๋œ ์นผ๋Ÿผ์ด ์ธ๋ฑ์Šค์˜ ์ฒซ ๋ฒˆ์งธ ์นผ๋Ÿผ์ด ์•„๋‹Œ ๊ฒฝ์šฐ ์ธ๋ฑ์Šค ํ’€ ์Šค์บ”์„ ํ•˜๊ฒŒ ๋œ๋‹ค. ์ฆ‰, ์ธ๋ฑ์Šค๊ฐ€ (A, B, C) ์ˆœ์„œ๋กœ ๋งŒ๋“ค์–ด์ ธ ์žˆ๋Š”๋ฐ, WHERE ์ ˆ์ด (B, C)๋กœ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒฝ์šฐ์ด๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ์ธ๋ฑ์Šค์˜ ํฌ๊ธฐ๋Š” ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ๋ณด๋‹ค ์ž‘๋‹ค. ํ…Œ์ด๋ธ” ์ „์ฒด๋ฅผ ์ฝ๋Š” ๊ฒƒ ๋ณด๋‹ค๋Š” ํšจ์œจ์ ์ด๋‹ค.

ํ…Œ์ด๋ธ” ์ „์ฒด๋ฅผ ์ฝ๊ฑฐ๋‚˜ ์ธ๋ฑ์Šค ํ’€ ์Šค์บ”์„ ํ•˜๋Š” ๊ฒฝ์šฐ ๋ณดํ†ต โ€˜์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•œ๋‹คโ€™, โ€˜์ธ๋ฑ์Šค๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•œ๋‹คโ€™ ๋ผ๊ณ  ํ•œ๋‹ค.

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

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

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

์ธ๋ฑ์Šค๊ฐ€ (A, B, C) ์ˆœ์„œ๋กœ ๋งŒ๋“ค์–ด์ ธ ์žˆ๋Š”๋ฐ, WHERE ์ ˆ์ด (B, C)๋กœ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒฝ์šฐ, MySQL 8.0 ๋ฒ„์ „๋ถ€ํ„ฐ ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ์ตœ์ ํ™”๋ฅผ ํ•ด์„œ A ์นผ๋Ÿผ์„ ๊ฑด๋„ˆ๋›ด๋‹ค. ๋ฃจ์Šค ์ธ๋ฑ์Šค ์Šค์บ”์€ GROUP BY ์ ˆ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋งŒ ์‚ฌ์šฉ๋์ง€๋งŒ ์ธ๋ฑ์Šค ์Šคํ‚ต ์Šค์บ”์€ WHERE ์ ˆ๋„ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅํ•˜๋„๋ก ์šฉ๋„๊ฐ€ ๋„“์–ด์กŒ๋‹ค.

๋‹ค์ค‘ ์นผ๋Ÿผ ์ธ๋ฑ์Šค

์ธ๋ฑ์Šค๊ฐ€ (A, B) ์ˆœ์„œ๋กœ ๋งŒ๋“ค์–ด์ ธ ์žˆ๋‹ค๋ฉด, ๋‘ ๋ฒˆ์งธ ์นผ๋Ÿผ B๋Š” ์ฒซ ๋ฒˆ์งธ ์นผ๋Ÿผ A์— ์˜์กดํ•ด ์ •๋ ฌ๋˜์–ด ์žˆ๋‹ค.

(1, 1) -> (1, 2) -> (1, 3) -> (2, 1) -> (2, 2) -> (2, 3) -> (3, 1) -> (3, 2) -> (3, 3)

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

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

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

์ธ๋ฑ์Šค ์Šค์บ” ๋ฐฉํ–ฅ

SELECT * FROM employees WHERE first_name >= 'Anneke'
ORDER BY first_name ASC LIMIT 4;
SELECT * FROM employees
ORDER BY first_name DESC LIMIT 5;

์ฒซ ๋ฒˆ์งธ ์ฟผ๋ฆฌ๋Š” first_name ์นผ๋Ÿผ์— ์ •์˜๋œ ์ธ๋ฑ์Šค๋กœ โ€˜Annekeโ€™๋ ˆ์ฝ”๋“œ๋ฅผ ์ฐพ๊ณ , ์ •์ˆœ์œผ๋กœ 4๊ฐœ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค. ๋‘ ๋ฒˆ์งธ ์ฟผ๋ฆฌ๋Š” ์—ญ์ˆœ์œผ๋กœ ์ฝ์œผ๋ฉด์„œ 5๊ฐœ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.

์ฟผ๋ฆฌ์˜ ORDER BY, MIN, MAX ํ•จ์ˆ˜ ๋“ฑ ์ตœ์ ํ™”๊ฐ€ ํ•„์š”ํ•˜๋ฉด ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ์•Œ์•„์„œ ์ฝ๊ธฐ ๋ฐฉํ–ฅ์„ ์ „ํ™˜ํ•œ๋‹ค.

๋‚ด๋ฆผ์ฐจ์ˆœ ์ธ๋ฑ์Šค

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

์—ญ์ˆœ ์Šค์บ” ์ฟผ๋ฆฌ๊ฐ€ ๋งŽ์€ ๊ฒฝ์šฐ, ๋‚ด๋ฆผ์ฐจ์ˆœ ์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์ข‹์€ ์„ ํƒ์ด ๋  ์ˆ˜ ์žˆ๋‹ค.

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

์ฟผ๋ฆฌ์˜ WHERE, GROUP BY, ORDER BY์ ˆ์ด ์–ด๋–ค ๊ฒฝ์šฐ์— ์ธ๋ฑ์Šค๋ฅผ ํƒ€๋Š”์ง€ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

๋น„๊ต ์กฐ๊ฑด์˜ ์ข…๋ฅ˜์™€ ํšจ์œจ์„ฑ

SELECT * FROM dept_emp
WHERE dept_no = 'd002' AND emp_no >= 10114;

์ธ๋ฑ์Šค ์ˆœ์„œ๊ฐ€ (dept_no, emp_no) ์ธ ๊ฒฝ์šฐ, โ€˜d002โ€™๋ฅผ ์ฐพ๊ณ , โ€˜10114โ€™๋ฅผ ์ฐพ๊ณ  ์ญ‰ ์ฝ๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค. ํ•˜์ง€๋งŒ ์ธ๋ฑ์Šค ์ˆœ์„œ๊ฐ€ (emp_no, dept_no) ์ธ ๊ฒฝ์šฐ๋Š” emp_no >= 10114, dept_no = โ€˜d002โ€™์ธ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฐพ๊ณ , ๊ทธ ์ดํ›„ ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ์— ๋Œ€ํ•ด dept_no๋ฅผ ๋น„๊ตํ•ด์•ผ ํ•œ๋‹ค.

์ฒซ ๋ฒˆ์งธ ๊ฒฝ์šฐ์˜๋Š” ์ž‘์—… ๋ฒ”์œ„ ๊ฒฐ์ • ์กฐ๊ฑด, ๋‘ ๋ฒˆ์งธ ๊ฒฝ์šฐ๋Š” ํ•„ํ„ฐ๋ง ์กฐ๊ฑด์ด ๋œ๋‹ค. ์ž‘์—… ๋ฒ”์œ„๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ์กฐ๊ฑด์ด ๋งŽ์„ ์ˆ˜๋ก ์ฟผ๋ฆฌ ์„ฑ๋Šฅ์ด ๋†’์•„์ง„๋‹ค. ํ•˜์ง€๋งŒ ํ•„ํ„ฐ๋ง ์กฐ๊ฑด์€ ๋งŽ์•„์ ธ๋„ ์„ฑ๋Šฅ์ด ๋†’์•„์ง€์ง€ ์•Š๋Š”๋‹ค. ์˜คํžˆ๋ ค ๋А๋ฆฌ๊ฒŒ ๋งŒ๋“ค ๋•Œ๊ฐ€ ๋งŽ๋‹ค.

์ธ๋ฑ์Šค์˜ ๊ฐ€์šฉ์„ฑ

B-Tree ์ธ๋ฑ์Šค์˜ ํŠน์ง•์€ ์™ผ์ชฝ ๊ฐ’์— ๊ธฐ์ค€ํ•ด์„œ ์˜ค๋ฅธ์ชฝ ๊ฐ’์ด ์ •๋ ฌ๋ผ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ธ๋ฑ์Šค ํ‚ค ํ•˜๋‚˜์˜ ์ •๋ ฌ๋„ ๊ทธ๋ ‡๊ณ , ๋‹ค์ค‘ ์นผ๋Ÿผ์—์„œ๋„ ์™ผ์ชฝ ์นผ๋Ÿผ์˜ ๊ฐ’์„ ๋ชจ๋ฅด๋ฉด ์ธ๋ฑ์Šค ๋ ˆ์ธ์ง€ ์Šค์บ”์„ ํ•  ์ˆ˜ ์—†๋‹ค.

SELECT * FROM employees WHERE first_name LIKE '%mer';

์ •๋ ฌ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋‚ฎ์€ ๋’ท๋ถ€๋ถ„์˜ ๊ฐ’๋งŒ์œผ๋กœ๋Š” B-Tree ์ธ๋ฑ์Šค์˜ ํšจ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์—†๋‹ค.

SELECT * FROM dept_emp WHERE emp_no>=10144;

์ธ๋ฑ์Šค๊ฐ€ (dept_no, emp_no)๋กœ ์ƒ์„ฑ๋˜์–ด ์žˆ๋‹ค๋ฉด, dept_no ์กฐ๊ฑด ์—†์ด๋Š” ๋ ˆ์ธ์ง€ ์Šค์บ”์„ ํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค.

4. ํด๋Ÿฌ์Šคํ„ฐ๋ง ์ธ๋ฑ์Šค

ํด๋Ÿฌ์Šคํ„ฐ๋ง ์ธ๋ฑ์Šค๋ž€?

MySQL ์„œ๋ฒ„์—์„œ ํด๋Ÿฌ์Šคํ„ฐ๋ง์€ ํ…Œ์ด๋ธ”์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ PK๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋น„์Šทํ•œ ๊ฒƒ๋ผ๋ฆฌ ๋ฌถ์–ด์„œ ์ €์žฅํ•˜๋Š” ํ˜•ํƒœ๋กœ ๊ตฌํ˜„๋œ๋‹ค. InnoDB ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์—์„œ๋งŒ ์ง€์›ํ•œ๋‹ค.

์ค‘์š”ํ•œ ๊ฒƒ์€ PK๊ฐ’์— ์˜ํ•ด ๋ ˆ์ฝ”๋“œ์˜ ์ €์žฅ ์œ„์น˜๊ฐ€ ๊ฒฐ์ •๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ฆ‰, PK๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๋ฉด ๊ทธ ๋ ˆ์ฝ”๋“œ์˜ ๋ฌผ๋ฆฌ์ ์ธ ์ €์žฅ ์œ„์น˜๊ฐ€ ๋ฐ”๋€Œ์–ด์•ผ ํ•œ๋‹ค. ๋•Œ๋ฌธ์— PK์— ๋Œ€ํ•œ ์˜์กด๋„๊ฐ€ ๋†’๋‹ค. PK๋ฅผ ์‹ ์ค‘ํ•˜๊ฒŒ ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค.

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

ํด๋Ÿฌ์Šคํ„ฐ๋ง ์ธ๋ฑ์Šค์˜ ์žฅ๋‹จ์ 

  • ์žฅ์ 
    • PK๋กœ ๊ฒ€์ƒ‰ํ•  ๋•Œ ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ์ด ๋งค์šฐ ๋น ๋ฅด๋‹ค.
    • ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ์„ธ์ปจ๋”๋ฆฌ ์ธ๋ฑ์Šค๊ฐ€ PK๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ธ๋ฑ์Šค๋งŒ์œผ๋กœ ์ฒ˜๋ฆฌ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Œ (์ปค๋ฒ„๋ง ์ธ๋ฑ์Šค)
  • ๋‹จ์ 
    • ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ์„ธ์ปจ๋”๋ฆฌ ์ธ๋ฑ์Šค๊ฐ€ PK๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— PK ๊ฐ’์ด ํด ๊ฒฝ์šฐ ์ „์ฒด์ ์œผ๋กœ ์ธ๋ฑ์Šค์˜ ํฌ๊ธฐ๊ฐ€ ์ปค์ง„๋‹ค.
    • ์„ธ์ปจ๋”๋ฆฌ ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ๊ฒ€์ƒ‰ํ•  ๋•Œ PK๋กœ ๋‹ค์‹œ ํ•œ ๋ฒˆ ๊ฒ€์ƒ‰ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ์ด ๋А๋ฆฌ๋‹ค.
    • PK์— ์˜ํ•ด ๋ ˆ์ฝ”๋“œ์˜ ๋ฌผ๋ฆฌ์  ์ €์žฅ ์œ„์น˜๊ฐ€ ๊ฒฐ์ •๋˜๊ธฐ ๋•Œ๋ฌธ์— INSERT ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ์ด ๋А๋ฆฌ๋‹ค
    • PK๋ฅผ ๋ณ€๊ฒฝํ•  ๋•Œ ๋ ˆ์ฝ”๋“œ๋ฅผ DELETEํ•˜๊ณ  INSERTํ•˜๋Š” ์ž‘์—…์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ์ด ๋А๋ฆฌ๋‹ค

์ผ๋ฐ˜์ ์œผ๋กœ ์›น ์„œ๋น„์Šค์™€ ๊ฐ™์€ OLTP(On-Line Transaction Processing)์—์„œ๋Š” ์“ฐ๊ธฐ์™€ ์ฝ๊ธฐ์˜ ๋น„์œจ์ด 2:8 ์ •๋„ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์กฐ๊ธˆ ๋А๋ฆฐ ์“ฐ๊ธฐ๋ฅผ ๊ฐ์ˆ˜ํ•˜๊ณ  ์ฝ๊ธฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.