DevLog ๐Ÿ˜ถ

[Real MySQL 8.0] ์ธ๋ฑ์Šค์™€ B-Tree ์•Œ์•„๋ณด๊ธฐ ๋ณธ๋ฌธ

๐Ÿ“–/Real MySQL 8.0

[Real MySQL 8.0] ์ธ๋ฑ์Šค์™€ B-Tree ์•Œ์•„๋ณด๊ธฐ

dolmeng2 2023. 7. 10. 21:40

๐ŸŒฑ ๋””์Šคํฌ ์ฝ๊ธฐ ๋ฐฉ์‹

๐Ÿ’ฌ HDD (ํ•˜๋“œ ๋””์Šคํฌ ๋“œ๋ผ์ด๋ธŒ) / SSD (์†”๋ฆฌ๋“œ ์Šค๋ ˆ์ดํŠธ ๋“œ๋ผ์ด๋ธŒ)

https://texit.tistory.com/15

 

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

 

 

๐Ÿ’ฌ ๋žœ๋ค I/O์™€ ์ˆœ์ฐจ I/O

๋””์Šคํฌ ์ฝ๊ธฐ ์—ฐ์‚ฐ์—์„œ '๋žœ๋ค I/O'์™€ '์ˆœ์ฐจ I/O'๋ผ๋Š” ๋ง์„ ๋“ค์€ ์ ์ด ์žˆ์„ ๊ฒƒ์ด๋‹ค.

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

๐Ÿ’ก SSD์˜ ๊ฒฝ์šฐ ํ”Œ๋ž˜ํ„ฐ๊ฐ€ ์—†์–ด์„œ ๋ณ„ ์ฐจ์ด๊ฐ€ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค. 
ํ•˜์ง€๋งŒ, SSD์—์„œ๋„ ์ˆœ์ฐจ I/O์— ๋น„ํ•ด ๋žœ๋ค I/O์˜ throughout์€ ๋–จ์–ด์ง„๋‹ค๊ณ  ํ•œ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ ๋””์Šคํฌ์˜ ์„ฑ๋Šฅ์€ ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ๋ฒˆ์— ๊ธฐ๋กํ•˜๋Š๋ƒ์— ์˜ํ•ด์„œ ๊ฒฐ์ •๋œ๋‹ค.
๋žœ๋ค I/O์™€ ์ˆœ์ฐจ I/O ๋ชจ๋‘ ํŒŒ์ผ ์“ฐ๊ธฐ ์‹คํ–‰ ์‹œ ๋™๊ธฐํ™” ์ž‘์—… (flush or fsync) ์ž‘์—…์ด ํ•„์š”ํ•œ๋ฐ, ์ˆœ์ฐจ I/O์˜ ๊ฒฝ์šฐ ๋™๊ธฐํ™” ์ž‘์—…์ด ๋„ˆ๋ฌด ๋นˆ๋ฒˆํ•˜๋ฉด ๋žœ๋ค I/O์ฒ˜๋Ÿผ ๋น„ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด์„œ ๋ณดํ†ต RAID ์ปจํŠธ๋กค๋Ÿฌ์˜ ์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ์˜ ๊ฒฝ์šฐ ํšจ์œจ์ ์œผ๋กœ ์ˆœ์ฐจ I/O๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๊ธฐ๋„ ํ•œ๋‹ค.

 

๋ณดํ†ต ์ฟผ๋ฆฌ๋ฅผ ํŠœ๋‹ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๋žœ๋ค I/O๋ฅผ ์–ด๋–ป๊ฒŒ ์ค„์ด๋Š” ๊ฒƒ์ธ์ง€๊ฐ€ ํฌ์ธํŠธ์ด๋‹ค.

๋ฐ‘์—์„œ ๋‹ค๋ฃจ๊ฒ ์ง€๋งŒ, ์ธ๋ฑ์Šค ๋ ˆ์ธ์ง€ ์Šค์บ”์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ๋•Œ ๋žœ๋ค I/O๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ํ’€ ํ…Œ์ด๋ธ” ์Šค์บ”์€ ์ˆœ์ฐจ I/O๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์˜คํžˆ๋ ค ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ๊ฐ€ ๊ต‰์žฅํžˆ ๋งŽ๊ณ  ํ•ด๋‹น ๋ฐ์ดํ„ฐ์˜ ๋Œ€๋ถ€๋ถ„์„ ์กฐํšŒํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ผ๋ถ€๋Ÿฌ ํ’€ ํ…Œ์ด๋ธ” ์Šค์บ”์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ญ์œผ๋กœ ์ˆœ์ฐจ I/O๋ฅผ ํ†ตํ•ด ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์กด์žฌํ•œ๋‹ค. ์ˆœ์ฐจ I/O์˜ ๊ฒฝ์šฐ ๋” ๋น ๋ฅด๊ณ  ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ์–ด์„œ OLTP (On-Line Transaction Processing) ์„ฑ๊ฒฉ์˜ ์„œ๋น„์Šค๋ณด๋‹ค ํ†ต๊ณ„ ์ž‘์—…์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋œ๊ณ  ํ•œ๋‹ค.

 

- ํด๋Ÿฌ์Šคํ„ฐ๋ง ์ธ๋ฑ์Šค๋ฅผ ํ™œ์šฉํ•ด์„œ ๋ ˆ์ธ์ง€ ์Šค์บ”์„ ํ•˜๊ฒŒ ๋˜๋ฉด, ์‹ค์ œ ๋ฌผ๋ฆฌ์ ์ธ ์ฟผ๋ฆฌ ์œ„์น˜๊ฐ€ ์ •๋ ฌ๋œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— "๋ฐ์ดํ„ฐ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ์กฐํšŒํ•œ๋‹ค๋ฉด" ๋žœ๋ค I/O๊ฐ€ ์•„๋‹Œ ์ˆœ์ฐจ I/O๋ฅผ ์ง„ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค. ๋ฌผ๋ก , ์ˆœ์„œ๋Œ€๋กœ๊ฐ€ ์•„๋‹Œ ์ค‘๊ฐ„์ค‘๊ฐ„ ๋ช‡ ๊ฐœ์”ฉ๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•œ๋‹ค๋ฉด ๋žœ๋ค I/O๋ฅผ ์ง„ํ–‰ํ•˜๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค.

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

 



๐ŸŒฑ ์ธ๋ฑ์Šค

์ธ๋ฑ์Šค๋ž€ ์ปฌ๋Ÿผ์˜ ๊ฐ’๊ณผ ํ•ด๋‹น ๋ ˆ์ฝ”๋“œ๊ฐ€ ์ €์žฅ๋œ ์ฃผ์†Œ๋ฅผ key-value๋กœ ์‚ผ์•„ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์ด๋•Œ, ์ปฌ๋Ÿผ์˜ ๊ฐ’์€ ์ฃผ์–ด์ง„ ์ˆœ์„œ๋Œ€๋กœ ๋ฏธ๋ฆฌ ์ •๋ ฌํ•ด์„œ ๋ณด๊ด€ํ•˜๋ฉฐ, ์ธ๋ฑ์Šค๊ฐ€ ๋งŽ์€ ํ…Œ์ด๋ธ”์€ CUD ์ž‘์—…์€ ๋Š๋ฆฌ์ง€๋งŒ, R์—์„œ ๋…๋ณด์ ์ธ ์„ฑ๋Šฅ์„ ๋ณด์ธ๋‹ค.

 

 

๐ŸŒฑ ํ”„๋ผ์ด๋จธ๋ฆฌ ์ธ๋ฑ์Šค์™€ ์„ธ์ปจ๋”๋ฆฌ ์ธ๋ฑ์Šค

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

 

 

๐ŸŒฑ B-Tree ์ธ๋ฑ์Šค (Balanced Tree)

์ธ๋ฑ์Šค ๊ตฌ์กฐ ์ค‘์— ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ํƒ€์ž…์€ B-Tree์ด๋‹ค. (AVL ๋“ฑ ๋‹ค๋ฅธ ๊ตฌ์กฐ๋„ ์žˆ์ง€๋งŒ, B-Tree๊ฐ€ ๋ธ”๋ก ๋‹จ์œ„๋กœ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ I/O ์ž‘์—…์„ ์ง„ํ–‰ํ•  ๋•Œ ๊ฐ€์žฅ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.) ์ธ๋ฑ์Šค๋Š” ํŽ˜์ด์ง€ ๋‹จ์œ„๋กœ ์ €์žฅ๋˜๋ฉฐ, ์ธ๋ฑ์Šค ํ‚ค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•ญ์ƒ ์ •๋ ฌ๋œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•œ๋‹ค๋Š” ๊ฒƒ์ด ํŠน์ง•์ด๋‹ค.

์™ผ์ชฝ์— ์žˆ๋Š” ๋ถ€๋ถ„์ด B-Tree ์ธ๋ฑ์Šค๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋˜๊ณ  (๋ฃจํŠธ ๋…ธ๋“œ ์ƒ๋žต), ์˜ค๋ฅธ์ชฝ์ด ํ”„๋ผ์ด๋จธ๋ฆฌ ํ‚ค ์ธ๋ฑ์Šค์ด๋‹ค. (= ํด๋Ÿฌ์Šคํ„ฐ ์ธ๋ฑ์Šค) 

์ตœ์ƒ์œ„๋Š” ๋ฃจํŠธ ๋…ธ๋“œ, ์ค‘๊ฐ„์€ ๋ธŒ๋žœ์น˜ ๋…ธ๋“œ, ๊ฐ€์žฅ ํ•˜์œ„๋Š” ๋ฆฌํ”„ ๋…ธ๋“œ๋ผ๊ณ  ๋งํ•˜๋Š”๋ฐ, ๋ฃจํŠธ์™€ ๋ธŒ๋žœ์น˜๋Š” ๋ณธ์ธ์˜ ํ•˜์œ„ ์ž์‹ ๋…ธ๋“œ์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ๋ฆฌํ”„ ๋…ธ๋“œ์˜ ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์— ์ €์žฅ๋œ ๋ ˆ์ฝ”๋“œ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๋˜ํ•œ, ์ธ๋ฑ์Šค์˜ ํ‚ค ๊ฐ’์€ ํ•ญ์ƒ ์ •๋ ฌ๋˜์–ด ์žˆ์ง€๋งŒ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์˜ ๋ ˆ์ฝ”๋“œ๋Š” ์ •๋ ฌ์ด ๋˜์–ด ์žˆ์ง€ ์•Š์•„์„œ ์ผ๋ฐ˜์ ์ธ DBMS์—์„œ๋Š” INSERT ์ˆœ์„œ๋กœ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์ค‘๊ฐ„์— DELETE๋กœ ์ธํ•ด ๋น„์–ด์žˆ๋Š” ๊ณต๊ฐ„์ด ์ƒ๊ธฐ๋ฉด ํ•ด๋‹น ์œ„์น˜์— ์‚ฝ์ž…์ด ์ง„ํ–‰๋œ๋‹ค. (์ฆ‰, ์ž„์˜์˜ ์ˆœ์„œ) ํ•˜์ง€๋งŒ, ํŠน๋ณ„ํ•˜๊ฒŒ innoDB์˜ ๊ฒฝ์šฐ ๋ ˆ์ฝ”๋“œ๊ฐ€ ํด๋Ÿฌ์Šคํ„ฐ๋˜๊ธฐ ๋•Œ๋ฌธ์— PK ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌ๋˜์–ด ์ €์žฅ๋˜๊ธฐ ๋•Œ๋ฌธ์— PK ์ž์ฒด๊ฐ€ ROWID (์‹ค์ œ ๋ ˆ์ฝ”๋“œ์˜ ๋ฌผ๋ฆฌ์ ์ธ ์ฃผ์†Œ) ์—ญํ• ์„ ํ•˜๋ฉฐ, ์ด๋กœ ์ธํ•ด PK๊ฐ€ '๋…ผ๋ฆฌ์ ์ธ ์ฃผ์†Œ'๋ฅผ ๊ฐ€์ง„๋‹ค๊ณ  ๋งํ•œ๋‹ค. (myISAM์—์„œ๋Š” ์„ธ์ปจ๋”๋ฆฌ ์ธ๋ฑ์Šค๊ฐ€ ๋ฌผ๋ฆฌ์ ์ธ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง)

 

๊ทธ๋ž˜์„œ innoDB ํ…Œ์ด๋ธ”์€ ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด๋„ ๋ฐ”๋กœ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์„ ์ฐพ์„ ์ˆ˜ ์—†์œผ๋ฉฐ, ์ธ๋ฑ์Šค ์˜์—ญ์— ์ €์žฅ๋œ PK๋ฅผ ํ†ตํ•ด PK ์ธ๋ฑ์Šค๋ฅผ ํ•œ ๋ฒˆ ๋” ๊ฒ€์ƒ‰ํ•œ ๋‹ค์Œ, PK ์ธ๋ฑ์Šค์˜ ๋ฆฌํ”„ ํŽ˜์ด์ง€์— ์ €์žฅ๋œ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฝ๋Š”๋‹ค. ์ฆ‰, ๋ชจ๋“  ์„ธ์ปจ๋”๋ฆฌ ์ธ๋ฑ์Šค ๊ฒ€์ƒ‰์—์„œ ๋ฐ์ดํ„ฐ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฝ์œผ๋ ค๋ฉด PK๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ๋Š” B-Tree๋ฅผ ๋‹ค์‹œ ๊ฒ€์ƒ‰ํ•ด์•ผ ํ•œ๋‹ค.

 

์ฐธ๊ณ ๋กœ, ๊ธฐ๋ณธ์ ์œผ๋กœ PK๋กœ ๋ ˆ์ฝ”๋“œ๋ฅผ ์กฐํšŒํ•  ๋•Œ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์€ ์ •๋ ฌ๋˜์–ด ์žˆ์ง€ ์•Š์•„์„œ PK ์ž์ฒด๊ฐ€ ์–ด๋Š ํŽ˜์ด์ง€์— ์ €์žฅ๋˜์–ด ์žˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋žœ๋ค I/O ๋ฐœ์ƒ ํ›„, ํ•ด๋‹น PK ๊ฐ’์„ ๋”ฐ๋ผ๊ฐ€์„œ ๋ฆฌํ”„ ๋…ธ๋“œ์— ์ €์žฅ๋œ ์‹ค์ œ ๋ ˆ์ฝ”๋“œ๋ฅผ ๋ฐ›์•„์˜ค๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

 


 

๐ŸŒฑ B-Tree ์ธ๋ฑ์Šค ํ‚ค ์ถ”๊ฐ€

B-tree์— ์ƒˆ๋กœ์šด ํ‚ค๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ €์žฅ๋  ์œ„์น˜๋ฅผ ๊ฒฐ์ •ํ•œ ๋‹ค์Œ, ๋ ˆ์ฝ”๋“œ์˜ ํ‚ค ๊ฐ’๊ณผ ๋Œ€์ƒ ๋ ˆ์ฝ”๋“œ์˜ ์ฃผ์†Œ ์ •๋ณด๋ฅผ B-Tree์˜ ์ธ๋ฑ์Šค์— ์ €์žฅํ•œ๋‹ค. ๋งŒ์•ฝ, ๋ฆฌํ”„ ๋…ธ๋“œ๊ฐ€ ๊ฝ‰์ฐจ๋ฉด ํ•ด๋‹น ๋…ธ๋“œ๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š”๋ฐ, ์ด๋•Œ ์ƒ์œ„ ๋ธŒ๋žœ์น˜ ๋…ธ๋“œ๊นŒ์ง€ ์ฒ˜๋ฆฌ ๋ฒ”์œ„๊ฐ€ ๋„“์–ด์ ธ์„œ ์ƒˆ๋กœ์šด ํ‚ค๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— (๋ถ€๋ชจ๋กœ ์Šน๊ฒฉํ•˜๋Š” ๊ฒƒ) ํ•ด๋‹น ์—ฐ์‚ฐ์€ ๋น„์šฉ์ด ๋งŽ์ด ๋“œ๋Š” ์ž‘์—…์ด๋‹ค.


๋ณดํ†ต ๋ ˆ์ฝ”๋“œ ์ถ”๊ฐ€ ์ž‘์—…์ด 1์ด๋ผ๋ฉด ํ…Œ์ด๋ธ”์˜ ์ธ๋ฑ์Šค์— ํ‚ค๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋น„์šฉ์€ 1.5 ์ •๋„๋กœ ์ธก์ •ํ•˜๋ฉฐ, ์˜ˆ๋ฅผ ๋“ค์–ด ์ธ๋ฑ์Šค๊ฐ€ 3๊ฐœ๋ผ๋ฉด 1.5 * 3 + 1 = 5.5 ์ •๋„๋ฅผ ๋น„์šฉ์œผ๋กœ ์ƒ๊ฐํ•œ๋‹ค. innoDB์—์„œ๋Š” ์ฒด์ธ์ง€ ๋ฒ„ํผ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ธ๋ฑ์Šค ํ‚ค๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ์ž‘์—…์„ ์ง€์—ฐ์‹œํ‚ฌ ์ˆ˜ ์žˆ์ง€๋งŒ, PK, UK ๊ฐ™์ด ์œ ๋‹ˆํฌ ์ œ์•ฝ ์กฐ๊ฑด์ด ๊ฑธ๋ ค์žˆ์„ ๊ฒฝ์šฐ ์ค‘๋ณต ์ฒดํฌ๋ฅผ ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฆ‰์‹œ B-Tree์— ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•˜๋Š” ์ž‘์—…์„ ์ง„ํ–‰ํ•œ๋‹ค.

 

๐Ÿ’ก ์ฒด์ธ์ง€ ๋ฒ„ํผ
์ฒด์ธ์ง€ ๋ฒ„ํผ๋Š” ํŠน์ • ๋ฐ์ดํ„ฐ ํŽ˜์ด์ง€๊ฐ€ ๋ฒ„ํผ ํ’€์— ์—†์„ ๋•Œ ์„ธ์ปจ๋”๋ฆฌ ์ธ๋ฑ์Šค ํŽ˜์ด์ง€์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์บ์‹œํ•˜๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ด๋‹ค,
์ธ๋ฑ์Šค ์‚ฝ์ž… / ์—…๋ฐ์ดํŠธ ์‹œ ๋””์Šคํฌ์— ๋Œ€ํ•œ ๋žœ๋ค I/O ์—ฐ์‚ฐ์ด ๋น„์šฉ์ด ํฌ๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•œ ์ธ๋ฑ์Šค ํŽ˜์ด์ง€๊ฐ€ ๋ฒ„ํผ ํ’€์— ์žˆ์œผ๋ฉด ๋ฐ”๋กœ ์—…๋ฐ์ดํŠธ๋ฅผ ํ•˜๊ณ , ๋””์Šคํฌ๋กœ๋ถ€ํ„ฐ ์ฝ์–ด์™€์•ผ ํ•œ๋‹ค๋ฉด ์ธ์„œํŠธ ๋ฒ„ํผ์— ์ €์žฅํ–ˆ๋‹ค๊ฐ€ ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ”๋กœ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ์ตœ์ ํ™”ํ•œ๋‹ค.
- ์ง€์—ฐ๋œ ์ž‘์—…์€ ์ถ”ํ›„ ๋‹ค๋ฅธ ์ฝ๊ธฐ ์ž‘์—…์„ ํ†ตํ•ด ๋ฒ„ํผ ํ’€์—์„œ ํŽ˜์ด์ง€ ๋กœ๋“œ ์‹œ merge

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

 



๐ŸŒฑ B-Tree ์ธ๋ฑ์Šค ํ‚ค ์‚ญ์ œ

์ธ๋ฑ์Šค ํ‚ค ์‚ญ์ œ ์‹œ ์‚ญ์ œํ•  ํ‚ค ๊ฐ’์ด ์ €์žฅ๋œ B-Tree์˜ ๋ฆฌํ”„ ๋…ธ๋“œ๋ฅผ ์ฐพ์•„์„œ ์‚ญ์ œ ๋งˆํ‚น ์ฒ˜๋ฆฌ๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค. ๋งˆํ‚น๋œ ๊ณต๊ฐ„์€ ๋ฐฉ์น˜ํ•  ์ˆ˜๋„ ์žˆ๊ณ , ์žฌํ™œ์šฉํ•  ์ˆ˜๋„ ์žˆ๋Š”๋ฐ ๋งˆํ‚น ์ž‘์—… ์—ญ์‹œ ๋””์Šคํฌ I/O ์ž‘์—…์ด ํ•„์š”ํ•ด์„œ ๋น„์šฉ์ด ํฌ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ MySQL 5.5 ์ด์ƒ๋ถ€ํ„ฐ๋Š” ์ธ๋ฑ์Šค ์ถ”๊ฐ€์ฒ˜๋Ÿผ ์ง€์—ฐ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

 



๐ŸŒฑ B-Tree ์ธ๋ฑ์Šค ํ‚ค ๋ณ€๊ฒฝ

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

 



๐ŸŒฑ B-Tree ์ธ๋ฑ์Šค ํ‚ค ๊ฒ€์ƒ‰

๊ธฐ๋ณธ์ ์œผ๋กœ ํ‚ค ํƒ์ƒ‰ ์‹œ ‘ํŠธ๋ฆฌ ํƒ์ƒ‰’ ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ์กฐํšŒํ•œ๋‹ค.

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

๋˜ํ•œ, innoDB ํ…Œ์ด๋ธ”์˜ ๊ฒฝ์šฐ ๊ฒ€์ƒ‰ ์‹œ ๋„ฅ์ŠคํŠธ ํ‚ค ๋ฝ์ด๋‚˜ ๋ ˆ์ฝ”๋“œ ๋ฝ์„ ํ†ตํ•ด์„œ ์ธ๋ฑ์Šค๋ฅผ ์ž ๊ทธ๊ณ  ํ…Œ์ด๋ธ”์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ž ๊ทธ๊ธฐ ๋•Œ๋ฌธ์—, UPDATE / DELETE ์‹œ ํ…Œ์ด๋ธ”์— ์‚ฌ์šฉํ• ๋งŒํ•œ ์ธ๋ฑ์Šค๊ฐ€ ์—†์œผ๋ฉด ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋งŽ์€ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ž ๊ธ€ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ธ๋ฑ์Šค ์„ค๊ณ„๋ฅผ ์ž˜ํ•ด์•ผ ํ•œ๋‹ค. (ํ…Œ์ด๋ธ” ์ „์ฒด์— ๋ฝ์ด ๊ฑธ๋ฆด ์ˆ˜๋„ ์žˆ์œผ๋‹ˆ ์ฃผ์˜ํ•ด์•ผ ํ•จ)

 



๐ŸŒฑ B-Tree ์ธ๋ฑ์Šค ์‚ฌ์šฉ ์‹œ ๊ณ ๋ คํ•  ์š”์†Œ

B-Tree์—์„œ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ธ๋ฑ์Šค๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์ปฌ๋Ÿผ์˜ ํฌ๊ธฐ์™€ ๋ ˆ์ฝ”๋“œ ๊ฑด์ˆ˜, ์œ ๋‹ˆํฌํ•œ ์ธ๋ฑ์Šค ํ‚ค ๊ฐ’์˜ ๊ฐœ์ˆ˜ ๋“ฑ์„ ์ž˜ ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค.

 

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

innoDB์˜ ๋ฐ์ดํ„ฐ ์ €์žฅ ์‹œ ๊ฐ€์žฅ ๊ธฐ๋ณธ ๋‹จ์œ„๋ฅผ ํŽ˜์ด์ง€ or ๋ธ”๋ก์ด๋ผ๊ณ  ํ•œ๋‹ค. (๋ฒ„ํผ ํ’€์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฒ„ํผ๋งํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ณธ ๋‹จ์œ„์ด๊ธฐ๋„ ํ•˜๋‹ค) ์ด๋•Œ, ์ธ๋ฑ์Šค ์—ญ์‹œ ํŽ˜์ด์ง€ ๋‹จ์œ„๋กœ ๊ด€๋ฆฌ๋˜๋ฉฐ, ๋ฃจํŠธ, ๋ธŒ๋žœ์น˜, ๋ฆฌํ”„ ๋…ธ๋“œ๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ธฐ์ค€์ด ‘ํŽ˜์ด์ง€’์ด๋‹ค. (๊ธฐ๋ณธ์€ 16KB)

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


์œ„ ๊ทธ๋ฆผ์„ ๊ธฐ์ค€์œผ๋กœ ํ•˜๋ฉด ํ•˜๋‚˜์˜ ์ธ๋ฑ์Šค ํŽ˜์ด์ง€์— ์ด 16*1024/(16+12) = 585๊ฐœ์˜ ํ‚ค๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ž์‹ ๋…ธ๋“œ๋ฅผ 585๊ฐœ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” B-Tree๊ฐ€ ๋œ๋‹ค. (ํ˜„์žฌ ํ‚ค ๊ฐ’์€ 16๋ฐ”์ดํŠธ) ํ•˜์ง€๋งŒ, ์ธ๋ฑ์Šค ํ‚ค ๊ฐ’์ด 32๋ฐ”์ดํŠธ๋กœ ๋Š˜์–ด๋‚œ๋‹ค๋ฉด 16*1024/(32+12) = 372๊ฐœ๊ฐ€ ์ €์žฅ๋˜๋ฉฐ, ๋งŒ์•ฝ ํ•œ ๋ฒˆ SELECT ์‹œ 500๊ฐœ ์ด์ƒ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์•ผ ํ•œ๋‹ค๋ฉด ๋‘ ๋ฒˆ์งธ ๊ฒฝ์šฐ๋Š” ๋””์Šคํฌ๋ฅผ 2๋ฒˆ ์ฝ์–ด์•ผ ํ•ด์„œ ๋” ๋Š๋ ค์ง€๊ฒŒ ๋œ๋‹ค.

๐Ÿ’ก ์ฆ‰, ์ธ๋ฑ์Šค ํ‚ค ๊ฐ’์ด ๊ธธ์–ด์ง€๋ฉด ์ „์ฒด์ ์ธ ์ธ๋ฑ์Šค์˜ ํฌ๊ธฐ๋„ ์ปค์ง€๊ธฐ ๋•Œ๋ฌธ์—, ์ œํ•œ๋œ ํฌ๊ธฐ์˜ ๋ฒ„ํผ ํ’€์—์„œ ํ•˜๋‚˜์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ์œ„ํ•œ ์ธ๋ฑ์Šค ํฌ๊ธฐ๊ฐ€ ์ปค์ง€๋ฉด ๋ฉ”๋ชจ๋ฆฌ์— ์บ์‹œํ•  ์ˆ˜ ์žˆ๋Š” ๋ ˆ์ฝ”๋“œ์˜ ์ˆ˜๊ฐ€ ์ค„์–ด๋“ค์–ด ๊ฒฐ๊ตญ ํšจ์œจ์„ฑ ์—ญ์‹œ ๋–จ์–ด์ง€๊ฒŒ ๋œ๋‹ค.

 


๐Ÿ’ฌ B-Tree ๊นŠ์ด

B-Tree์˜ ๊นŠ์ด๋Š” ์ง์ ‘ ์ œ์–ด๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ๋งŒ์•ฝ B-Tree์˜ ๊นŠ์ด๊ฐ€ 3์ด๋ผ๊ณ  ๊ฐ€์ •ํ•œ๋‹ค๋ฉด ์œ„์˜ ์˜ˆ์ œ์—์„œ ์ตœ๋Œ€ 2์–ต (585^3)์„ ๊ฐ€์ง€์ง€๋งŒ, ์ธ๋ฑ์Šค ํ‚ค ๊ฐ’์ด 32๋ฐ”์ดํŠธ๋ผ๋ฉด ์ตœ๋Œ€ 5์ฒœ๋งŒ (372^3)์ด๋ผ์„œ ์ค„์–ด๋“ค๊ณ , ๊ฒฐ๊ตญ ๋””์Šคํฌ ์ ‘๊ทผ ํšŸ์ˆ˜๊ฐ€ ๋˜ ๋Š˜์–ด๋‚˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ์ดˆ๋ž˜ํ•œ๋‹ค. ์›ฌ๋งŒํ•˜๋ฉด ๊นŠ์ด๋Š” ์ž‘๊ฒŒ ๋งŒ๋“ค์ž.

 


๐Ÿ’ฌ ์„ ํƒ๋„(Selectivity) = ๊ธฐ์ˆ˜์„ฑ(Cardinality)

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

ex) ์ „์ฒด ๋ ˆ์ฝ”๋“œ ์ˆ˜๋Š” 10000๊ฐœ์ผ ๋•Œ ์ฟผ๋ฆฌ ์กฐ๊ฑด์— ์ผ์น˜ํ•˜๋Š” ๋ ˆ์ฝ”๋“œ๊ฐ€ 1๊ฐœ๋ผ๋ฉด?
์ด๋•Œ, ํŠน์ • ์ปฌ๋Ÿผ A์— ๋Œ€ํ•ด ์œ ๋‹ˆํฌํ•œ ๊ฐ’์˜ ๊ฐœ์ˆ˜๊ฐ€ 10๊ฐœ๋ผ๋ฉด 9๊ฐœ๋ฅผ ๋” ์ฝ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๊ณ , ์œ ๋‹ˆํฌํ•œ ๊ฐ’์˜ ๊ฐœ์ˆ˜๊ฐ€ 1000๊ฐœ๋ผ๋ฉด 999๊ฐœ๋ฅผ ๋” ์ฝ์€ ๊ฒƒ์ด ๋œ๋‹ค. ์ฆ‰, ํ›„์ž์˜ ๊ฒฝ์šฐ๊ฐ€ ๋น„ํšจ์œจ์ ์ธ ๋ฐฉ์‹์ด ๋œ๋‹ค.

ํ•˜์ง€๋งŒ, A ์ปฌ๋Ÿผ์— ์ธ๋ฑ์Šค๋ฅผ ๊ฑธ์—ˆ๋‹ค๋ฉด ์ธ๋ฑ์Šค๋œ ์ปฌ๋Ÿผ์— ๋Œ€ํ•ด์„œ ์ „์ฒด ๋ ˆ์ฝ”๋“œ์˜ ๊ฐœ์ˆ˜๋‚˜ ์œ ๋‹ˆํฌํ•œ ๊ฐ’์˜ ๊ฐœ์ˆ˜ ๋“ฑ์˜ ํ†ต๊ณ„ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. (์ธ๋ฑ์Šค๋ณ„๋กœ ํ‰๊ท  ๋ช‡ ๊ฐœ์˜ ๋ ˆ์ฝ”๋“œ๊ฐ€ ์žˆ๋Š”์ง€ ๋ฏธ๋ฆฌ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ) ์ด๋•Œ ์ „์ž์˜ ๊ฒฝ์šฐ 10000 / 10 = 1000๊ฐœ๋ฅผ ๋ฏธ๋ฆฌ ์ฝ๊ฒŒ ๋˜์–ด, 1๊ฐœ๋งŒ ์ผ์น˜ํ•œ๋‹ค๋ฉด 999๊ฐœ๊ฐ€ ๋‚ญ๋น„๋œ๋‹ค. ๋ฐ˜๋ฉด, ํ›„์ž์˜ ๊ฒฝ์šฐ 10000 / 1000 = 10๊ฐœ๋ฅผ ๋ฏธ๋ฆฌ ์ฝ๊ฒŒ ๋˜์–ด, 9๊ฐœ๊ฐ€ ๋‚ญ๋น„๋˜๊ธฐ ๋•Œ๋ฌธ์—, ์ธ๋ฑ์Šค๋ฅผ ๊ฑธ๋ฉด ์˜คํžˆ๋ ค ๊ฒฐ๊ณผ๊ฐ€ ๋ฐ˜๋Œ€๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ธ๋ฑ์Šค์˜ ๊ฒฝ์šฐ ์œ ๋‹ˆํฌํ•œ ๊ฐ’์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์„์ˆ˜๋ก ๋” ํšจ์œจ์ ์ด๋‹ค.

 


 

๐ŸŒฑ ๋ฐ์ดํ„ฐ๋ฅผ ๋ช‡ ๊ฐœ๋‚˜ ์ฝ์–ด์™€์•ผ ํ• ๊นŒ?

์ผ๋ฐ˜์ ์ธ DBMS์˜ ์˜ตํ‹ฐ๋งˆ์ด์ €๋Š” ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ๋ ˆ์ฝ”๋“œ 1๊ฑด์„ ์ฝ๋Š” ๊ฒŒ ์ง์ ‘ ๋ ˆ์ฝ”๋“œ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š” ๊ฒƒ๋ณด๋‹ค 4~5๋ฐฐ ์ •๋„ ๋น„์šฉ์ด ๋งŽ์ด ๋“ ๋‹ค๊ณ  ์˜ˆ์ธกํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ์ฝ์„ ๋ ˆ์ฝ”๋“œ์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ „์ฒด ํ…Œ์ด๋ธ” ๋ ˆ์ฝ”๋“œ์˜ 20~25%๋ฅผ ๋„˜๋Š”๋‹ค๋ฉด ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๊ทธ๋ƒฅ ํ’€ํ…Œ์ด๋ธ” ์Šค์บ” + ํ•„ํ„ฐ๋ง์ด ๋” ํšจ์œจ์ ์ด๋‹ค.

 



๐Ÿ’ฌ ์ธ๋ฑ์Šค ๋ ˆ์ธ์ง€ ์Šค์บ”

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

SELECT * FROM crew WHERE name BETWEEN Ice AND Journey

๋ฆฌํ”„ ๋…ธ๋“œ 5๋ฒˆ ํŽ˜์ด์ง€์— ๋„๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ฃจํŠธ ๋…ธ๋“œ, ๋ธŒ๋žœ์น˜ ๋…ธ๋“œ์—์„œ ์ฐพ์•„๋“ค์–ด๊ฐ„๋‹ค. ์ดํ›„ ์ฐพ์€ ๋‹ค์Œ์—๋Š” ์ญ‰ ๋ ˆ์ธ์ง€ ์Šค์บ”์„ ์ง„ํ–‰ํ•˜๋ฉฐ ‘Journey’ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฐพ์„ ๋•Œ๊นŒ์ง€ ์ญ‰ ์Šค์บ”ํ•˜๋‹ค๊ฐ€ ์ฐพ์œผ๋ฉด ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ๋œ๋‹ค. 

 

๋‹จ, ์ธ๋ฑ์Šค์˜ ๋ฆฌํ”„ ๋…ธ๋“œ์—์„œ ๊ฒ€์ƒ‰ ์กฐ๊ฑด์— ์ผ์น˜ํ•˜๋Š” ๊ฒƒ๋“ค์˜ ๋ ˆ์ฝ”๋“œ ์ฃผ์†Œ ๊ฐ’์„ ๋ฐ”ํƒ•์œผ๋กœ, ๋ฐ์ดํ„ฐ ํŒŒ์ผ๋กœ๋ถ€ํ„ฐ ์ฝ์–ด์™€์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— (์ผ์น˜ํ•˜๋Š” ๊ฐœ์ˆ˜๋งŒํผ ๋””์Šคํฌ์—์„œ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•จ) ๋žœ๋ค I/O ์ž‘์—…์ด ๋ฐœ์ƒํ•˜์—ฌ ๋น„์šฉ์ด ์ƒ๋‹นํžˆ ํฌ๋‹ค. 

 

๐Ÿ’ก ์ธ๋ฑ์Šค ๋ ˆ์ธ์ง€ ์Šค์บ” ๊ณผ์ •
1. ์ธ๋ฑ์Šค์—์„œ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๊ฐ’์ด ์ €์žฅ๋œ ์œ„์น˜๋ฅผ ์ฐพ๋Š”๋‹ค. (index seek) 
2. ํƒ์ƒ‰๋œ ์œ„์น˜๋กœ๋ถ€ํ„ฐ ํ•„์š”ํ•œ ๋งŒํผ ์ธ๋ฑ์Šค๋ฅผ ์ฝ์–ด๋‚˜๊ฐ„๋‹ค. (index scan)
3. ์ฝ์€ ์ธ๋ฑ์Šค ํ‚ค์™€ ๋ ˆ์ฝ”๋“œ ์ฃผ์†Œ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ํŽ˜์ด์ง€๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ , ์ €์žฅ๋œ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฝ์–ด์˜จ๋‹ค. (๋žœ๋ค I/O)
- ๋งŒ์•ฝ ์ปค๋ฒ„๋ง ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋””์Šคํฌ์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฝ์–ด์˜ค์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋žœ๋ค ์ฝ๊ธฐ๊ฐ€ ์ค„์–ด๋“ค๊ณ  ์„ฑ๋Šฅ์ด ๋นจ๋ผ์ง„๋‹ค.

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


- index seek, index scan ๊ณผ์ •์€ mySQL์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฟผ๋ฆฌ๋กœ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

SHOW STATUS LIKE 'handler_%';

- handler_read_key: index seek๊ฐ€ ์‹คํ–‰๋œ ํšŸ์ˆ˜

 

- handler_read_next, handler_read_prev: index scan์—์„œ ์ฝ์€ ๋ ˆ์ฝ”๋“œ ๊ฐœ์ˆ˜
handler_read_next: ์ธ๋ฑ์Šค ์ •์ˆœ์œผ๋กœ ์ฝ์€ ๋ ˆ์ฝ”๋“œ ๊ฐœ์ˆ˜ / handler_read_prev: ์ธ๋ฑ์Šค ์—ญ์ˆœ์œผ๋กœ ์ฝ์€ ๋ ˆ์ฝ”๋“œ ๊ฐœ์ˆ˜

 

- handler_read_first, handler_read_last: ์ธ๋ฑ์Šค์˜ ์ฒซ ๋ฒˆ์งธ, ๋งˆ์ง€๋ง‰ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฝ์€ ํšŸ์ˆ˜
๋ณดํ†ต MIN(), MAX() ๊ฐ™์ด ๊ฐ’์ด ๊ฐ€์žฅ ์ž‘๊ฑฐ๋‚˜ ํฐ ๊ฐ’์„ ์ฝ์„ ๋•Œ๋งŒ ์ฆ๊ฐ€ํ•œ๋‹ค.

 

์ฐธ๊ณ  - ์—ฌ๊ธฐ์„œ ๋ชจ๋‘ ์ธ๋ฑ์Šค๋งŒ ์ฝ์—ˆ๋Š”์ง€, ์ธ๋ฑ์Šค๋กœ ํ…Œ์ด๋ธ”์˜ ๋ ˆ์ฝ”๋“œ๋งŒ ์ฝ์—ˆ๋Š”์ง€๋Š” ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๋Š”๋‹ค.

 


 

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

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

๋ฌผ๋ก , ์ธ๋ฑ์Šค๊ฐ€ ํ…Œ์ด๋ธ” ํฌ๊ธฐ๋ณด๋‹ค ์ž‘๊ธฐ ๋•Œ๋ฌธ์— ํ…Œ์ด๋ธ” ํ’€ ์Šค์บ”์— ๋น„ํ•ด์„œ๋Š” ์ข€ ๋” ํšจ์œจ์ ์ด๋‹ค.
- ๋‹น์—ฐํžˆ ์ฟผ๋ฆฌ์—์„œ ํ•„์š”ํ•œ ์ปฌ๋Ÿผ๋“ค์ด ์ธ๋ฑ์Šค์— ์กด์žฌํ•ด์•ผ ํ…Œ์ด๋ธ” ์Šค์บ”์ด ์•ˆ ์ผ์–ด๋‚œ๋‹ค. (๋‹ค๋ฅธ ์ปฌ๋Ÿผ๊นŒ์ง€ ํ•„์š”ํ•˜๋‹ค๋ฉด ํ…Œ์ด๋ธ” ์Šค์บ” ๋ฐœ์ƒ)

 



๐Ÿ’ฌ ๋ฃจ์Šค ์ธ๋ฑ์Šค ์Šค์บ”

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

SELECT name, MIN(age)
FROM crew
WHERE id BETWEEN 1 AND 100
GROUP BY id;

 

crew ํ…Œ์ด๋ธ”์€ (id, age)๋กœ ์ธ๋ฑ์Šค๊ฐ€ ์ƒ์„ฑ๋˜์–ด ์žˆ๊ณ , ์ •๋ ฌ๊นŒ์ง€ ๋˜์–ด ์žˆ๋Š” ์ƒํƒœ๋ผ๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž.
๊ทธ๋ ‡๋‹ค๋ฉด ์œ„์˜ ์ฟผ๋ฆฌ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ id ๊ทธ๋ฃน๋ณ„๋กœ ์ฒซ ๋ฒˆ์งธ ๋ ˆ์ฝ”๋“œ์˜ age ๊ฐ’๋งŒ ์ฝ์œผ๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์กฐ๊ฑด์— ๋งŒ์กฑํ•˜์ง€ ์•Š๋Š” ๋ ˆ์ฝ”๋“œ๋Š” ๋ฌด์‹œํ•˜๊ณ  ์Šค์บ”์„ ์ง„ํ–‰ํ•œ๋‹ค.

 



๐Ÿ’ฌ ์ธ๋ฑ์Šค ์Šคํ‚ต ์Šค์บ”

ALTER TABLE crew ADD INDEX idx_gender_birth (gender, birth);

 

crew ํ…Œ์ด๋ธ”์— ์œ„์™€ ๊ฐ™์ด ์„ฑ๋ณ„๊ณผ ์ƒ์ผ ์ •๋ณด๋ฅผ ๊ฐ€์ง„ ๋ณตํ•ฉ ์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž.
์ด๋•Œ, ์œ„์˜ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” gender์— ๋Œ€ํ•œ ์กฐ๊ฑด์ด ๊ผญ ๋“ค์–ด๊ฐ€์•ผ ํ–ˆ์—ˆ๋‹ค.


ํ•˜์ง€๋งŒ, MySQL 8.0๋ถ€ํ„ฐ๋Š” birth ์ปฌ๋Ÿผ์œผ๋กœ๋„ ์ธ๋ฑ์Šค ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ‘์ธ๋ฑ์Šค ์Šคํ‚ต ์Šค์บ”’ ์ตœ์ ํ™” ๊ธฐ๋Šฅ์ด ๋„์ž…๋˜์—ˆ๋‹ค!
- explain์œผ๋กœ ์‹คํ–‰ ๊ณ„ํš์„ ๋ณด๋ฉด type์— range๋ผ๊ณ  ๋– ์žˆ์„ ๊ฒƒ์ด๋‹ค.

- gender ์ปฌ๋Ÿผ์—์„œ ์œ ๋‹ˆํฌํ•œ ๊ฐ’์„ ๋‹ค ์กฐํšŒํ•œ ๋‹ค์Œ, ์ฟผ๋ฆฌ์— gender ์ปฌ๋Ÿผ์„ ๋‚ด๋ถ€์ ์œผ๋กœ ์•Œ์•„์„œ ์ถ”๊ฐ€ํ•ด์„œ ๋‹ค์‹œ ์‹คํ–‰ํ•˜๋Š” ํ˜•ํƒœ๋กœ ์ฒ˜๋ฆฌ๋œ๋‹ค.

 

SELECT gender, birth FROM crew WHERE birth >= '2001-03-12'
# ๋‚ด๋ถ€์ ์œผ๋กœ ์•„๋ž˜์™€ ๊ฐ™์ด ์ฟผ๋ฆฌ ์ƒ์„ฑ ํ›„ ์ตœ์ ํ™”
SELECT gender, birth FROM crew WHERE birth >= '2001-03-12' AND gender = 'W'
SELECT gender, birth FROM crew WHERE birth >= '2001-03-12' AND gender = 'M'

 

enum ๊ฐ’์ด ์•„๋‹ˆ๋”๋ผ๋„ ์ธ๋ฑ์Šค์— ์กด์žฌํ•˜๋Š” ๋ชจ๋“  ๊ฐ’์„ ๋จผ์ € ์ถ”์ถœํ•˜๊ณ , ์ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ธ๋ฑ์Šค ์Šคํ‚ต ์Šค์บ”์„ ์ง„ํ–‰ํ•œ๋‹ค.
ํ•˜์ง€๋งŒ, ์œ„ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ‘์กฐ๊ฑด์ด ์—†๋Š” ์ธ๋ฑ์Šค์˜ ์ปฌ๋Ÿผ์˜ ์œ ๋‹ˆํฌํ•œ ๊ฐ’์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ ์–ด์•ผ ํ•˜๊ณ ’, ‘์ฟผ๋ฆฌ๊ฐ€ ์ธ๋ฑ์Šค์— ์กด์žฌํ•˜๋Š” ์ปฌ๋Ÿผ๋งŒ์œผ๋กœ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•ด์•ผ ํ•œ๋‹ค. (์ปค๋ฒ„๋ง ์ธ๋ฑ์Šค)’ ๋งŒ์•ฝ, ์œ ๋‹ˆํฌํ•œ ๊ฐ’์ด ๋งŽ์•„์ง€๋ฉด ์Šค์บ” ์‹œ์ž‘ ์ง€์ ์„ ๊ฒ€์ƒ‰ํ•˜๋Š” ์ž‘์—…๋„ ๋งŽ์ด ํ•„์š”ํ•ด์งˆ ๊ฒƒ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด (gender, birth)๋ผ๋ฉด gender์˜ ๊ฐœ์ˆ˜๋งŒํผ ์Šค์บ” ์‹œ์ž‘ ์ง€์ ์ด ์ƒ๊ธฐ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ˆ๊นŒ ์œ ๋‹ˆํฌํ•œ ๊ฐ’์ด ์ ์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ.


๋งŒ์•ฝ, ์ธ๋ฑ์Šค ์™ธ์— ๋‹ค๋ฅธ ์ปฌ๋Ÿผ์ด ํ•„์š”ํ•˜๋‹ค๋ฉด ํ’€ ํ…Œ์ด๋ธ” ์Šค์บ”์„ ํ†ตํ•ด์„œ ์‹คํ–‰ ๊ณ„ํš์„ ์ˆ˜๋ฆฝํ•œ๋‹ค.

 



๐Ÿ’ฌ ๋‹ค์ค‘ ์ปฌ๋Ÿผ ์ธ๋ฑ์Šค (๋ณตํ•ฉ ์ธ๋ฑ์Šค)

์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปฌ๋Ÿผ์„ ํฌํ•จํ•˜๋Š” ์ธ๋ฑ์Šค์ด๋‹ค. ์ธ๋ฑ์Šค์˜ ๋‘ ๋ฒˆ์งธ ์ปฌ๋Ÿผ์€ ์ฒซ ๋ฒˆ์งธ ์ปฌ๋Ÿผ์— ์˜์กดํ•ด์„œ ์ •๋ ฌ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์ฒซ ๋ฒˆ์งธ ์ปฌ๋Ÿผ์ด ๋˜‘๊ฐ™์€ ๋ ˆ์ฝ”๋“œ์— ๋Œ€ํ•ด์„œ๋งŒ ์œ ์˜๋ฏธํ•˜๋ฏ€๋กœ, ๊ฐ ์ปฌ๋Ÿผ์˜ ์ˆœ์„œ๋Š” ์ƒ๋‹นํžˆ ์ค‘์š”ํ•œ ํฌ์ธํŠธ์ด๋‹ค.

 



๐ŸŒฑ B-Tree ์ธ๋ฑ์Šค์˜ ์ •๋ ฌ๊ณผ ์Šค์บ” ๋ฐฉํ–ฅ

๊ธฐ๋ณธ์ ์œผ๋กœ ์ธ๋ฑ์Šค์˜ ํ‚ค ๊ฐ’์€ ํ•ญ์ƒ ์˜ค๋ฆ„์ฐจ์ˆœ / ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ๋‹ค.

 


๐Ÿ’ฌ ์ธ๋ฑ์Šค์˜ ์ •๋ ฌ

mySQL 8.0๋ถ€ํ„ฐ๋Š” ์ •๋ ฌ ์ˆœ์„œ๋ฅผ ํ˜ผํ•ฉํ•œ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

CREATE INDEX idx_name_age ON crew (name ASC, age DESC);



๐Ÿ’ฌ ์ธ๋ฑ์Šค ์Šค์บ” ๋ฐฉํ–ฅ

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

SELECT * FROM crew 
WHERE name >= 'journey' 
ORDER BY name ASC
LIMIT 4;

์ด ์ฟผ๋ฆฌ์˜ ๊ฒฝ์šฐ name์˜ ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ‘journey’ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฐพ์€ ๋‹ค์Œ, ์ •๋ฐฉํ–ฅ์œผ๋กœ ์ธ๋ฑ์Šค๋ฅผ ์ฝ์œผ๋ฉด์„œ 4๊ฐœ๋ฅผ ๊ฐ€์ ธ์˜ค๋ฉด ๋œ๋‹ค. (ASC)

SELECT * FROM crew 
ORDER BY name DESC
LIMIT 4;

 

๋ฐ˜๋ฉด์— ์ด ์ฟผ๋ฆฌ์˜ ๊ฒฝ์šฐ name ์ธ๋ฑ์Šค๋ฅผ ์—ญ์ˆœ์œผ๋กœ ์ฝ์–ด์„œ 4๊ฐœ๋งŒ ๊ฐ€์ ธ์˜ค๋ฉด ๋œ๋‹ค. (DESC)

 


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

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

์œ„ ๊ทธ๋ฆผ์—์„œ 4๊ฐ€์ง€์˜ ํ‚ค์›Œ๋“œ๋ฅผ ์–ป์–ด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

- ์˜ค๋ฆ„์ฐจ์ˆœ ์ธ๋ฑ์Šค: ์ž‘์€ ๊ฐ’์˜ ์ธ๋ฑ์Šค ํ‚ค๊ฐ€ B-Tree์˜ ์™ผ์ชฝ์œผ๋กœ ์ •๋ ฌ๋œ ์ธ๋ฑ์Šค
- ๋‚ด๋ฆผ์ฐจ์ˆœ ์ธ๋ฑ์Šค: ํฐ ๊ฐ’์˜ ์ธ๋ฑ์Šค ํ‚ค๊ฐ€ B-Tree์˜ ์™ผ์ชฝ์œผ๋กœ ์ •๋ ฌ๋œ ์ธ๋ฑ์Šค
- ์ธ๋ฑ์Šค ์ •๋ฐฉํ–ฅ ์Šค์บ”: ์ธ๋ฑ์Šค ๋ฆฌํ”„ ๋…ธ๋“œ์˜ ์™ผ์ชฝ → ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์Šค์บ” (์ˆœ์„œ๋Œ€๋กœ ์ฝ๋Š” ๊ฒƒ)
- ์ธ๋ฑ์Šค ์—ญ๋ฐฉํ–ฅ ์Šค์บ”: ์ธ๋ฑ์Šค ๋ฆฌํ”„ ๋…ธ๋“œ์˜ ์˜ค๋ฅธ์ชฝ → ์™ผ์ชฝ์œผ๋กœ ์Šค์บ” (๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ์œผ๋กœ ์ฝ๋Š” ๊ฒƒ)

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

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

- ๋˜ํ•œ, ์ธ๋ฑ์Šค๋Š” ํŽ˜์ด์ง€ ๋‚ด๋ถ€์—์„œ 4~8๊ฐœ ์ •๋„ ๋ฌถ์–ด์„œ ๊ทธ๋ฃน์„ ๋งŒ๋“ค์–ด, ํ•ด๋‹น ๊ทธ๋ฃน์˜ ๋Œ€ํ‘œํ‚ค๋ฅผ ๋ฝ‘์•„ ๋ฆฌ์ŠคํŠธ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค. (= ํŽ˜์ด์ง€ ๋””๋ ‰ํ„ฐ๋ฆฌ) ๊ทผ๋ฐ ์ด ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ๋‹จ๋ฐฉํ–ฅ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค ๋ณด๋‹ˆ ์—ญ๋ฐฉํ–ฅ์œผ๋กœ ์ ‘๊ทผ์ด ์•ˆ ๋˜์–ด์„œ ๋” ๋Š๋ฆฐ ๊ฒƒ.
ex) ์˜ค๋ฆ„์ฐจ์ˆœ ์ธ๋ฑ์Šค๋ผ๋ฉด ํ‚ค๊ฐ’์ด ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ์–ด ์ •๋ฐฉํ–ฅ ์Šค์บ”์ด ๋น ๋ฅธ๋ฐ, ๋‚ด๋ฆผ์ฐจ์ˆœ ์ธ๋ฑ์Šค๋ผ๋ฉด ํ‚ค๊ฐ’์ด ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ์–ด ์—ญ๋ฐฉํ–ฅ ์Šค์บ”์ด ์ข€ ๋” ๋น ๋ฅธ ๋Š๋‚Œ... ์ธ ๊ฒƒ ๊ฐ™๋‹ค.


๊ทธ๋ž˜์„œ ์—ญ๋ฐฉํ–ฅ ์Šค์บ”์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋‚ด๋ฆผ์ฐจ์ˆœ ์ธ๋ฑ์Šค๋ฅผ ๊ณ ๋ คํ•ด๋ณด์ž.

SELECT * FROM crew
WHERE id = ?
ORDER BY name DESC
LIMIT 10;

 

์œ„์˜ ์ฟผ๋ฆฌ์— ๋Œ€ํ•ด์„œ ์†Œ๋Ÿ‰์ด๋ผ๋ฉด ์˜ค๋ฆ„์ฐจ์ˆœ, ๋Œ€๋Ÿ‰์ด๋ฉด ๋‚ด๋ฆผ์ฐจ์ˆœ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ์ข‹๋‹ค.
์˜ค๋ฆ„์ฐจ์ˆœ ์ธ๋ฑ์Šค: INDEX (id ASC, name ASC);
๋‚ด๋ฆผ์ฐจ์ˆœ ์ธ๋ฑ์Šค: INDEX (id DESC, name DESC);

 


 

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

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

SELECT * FROM crew
WHERE course = 'Backend' and age >= 23;

 

์œ„์™€ ๊ฐ™์€ ์ฟผ๋ฆฌ์— ์•„๋ž˜์™€ ๊ฐ™์€ ์ธ๋ฑ์Šค๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž.

INDEX (course, age)
INDEX (age, course)

 

์ฒซ ๋ฒˆ์งธ ์ธ๋ฑ์Šค์˜ ๊ฒฝ์šฐ course = 'Backend' and age >= 23์ธ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฐพ์€ ๋‹ค์Œ, course=’Backend’๊ฐ€ ์•„๋‹ ๋•Œ๊นŒ์ง€ ์ธ๋ฑ์Šค๋ฅผ ๊ทธ๋ƒฅ ์ญ‰ ์ฝ๋Š”๋‹ค. ์ด๋•Œ๋Š” ์ฝ์€ ๋ ˆ์ฝ”๋“œ๊ฐ€ ๋ชจ๋‘ ์กฐ๊ฑด์ ˆ์— ํ•ด๋‹นํ•˜๋Š” ๋ ˆ์ฝ”๋“œ๊ฐ€ ๋œ๋‹ค.

 

ํ•˜์ง€๋งŒ ๋‘ ๋ฒˆ์งธ ์ธ๋ฑ์Šค์˜ ๊ฒฝ์šฐ age >= 23 and course = 'Backend'์ธ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฐพ๊ณ , ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ์— ๋Œ€ํ•ด์„œ course=’Backend’์ธ์ง€ ๊ฒฝ์šฐ๋ฅผ ์ฐพ์•„์•ผ ํ•œ๋‹ค. (ํ•„ํ„ฐ๋ง) ์™œ๋ƒ๋ฉด course์˜ ๊ฒฝ์šฐ age๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ‘course’๋ผ๋Š” ์ปฌ๋Ÿผ์€ ๋น„๊ต ์ž‘์—…์„ ์ขํžˆ๋Š”๋ฐ ๋„์›€์„ ์ฃผ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋‹จ์ˆœํžˆ ํ•ด๋‹น ๊ฐ’์ด ์ผ์น˜ํ•˜๋Š”์ง€์—๋งŒ ์‚ฌ์šฉ๋œ๋‹ค.


์—ฌ๊ธฐ์„œ ์ฒซ ๋ฒˆ์งธ ์ธ๋ฑ์Šค์˜ course = 'Backend' and age >= 23์„ ์ž‘์—… ๋ฒ”์œ„ ๊ฒฐ์ • ์กฐ๊ฑด, ๋‘ ๋ฒˆ์งธ ์ธ๋ฑ์Šค์˜ course = 'Backend'๋ฅผ ์ฒดํฌ ์กฐ๊ฑด์ด๋ผ๊ณ  ํ•œ๋‹ค.

 



๐Ÿ’ฌ ์ธ๋ฑ์Šค์˜ ๊ฐ€์šฉ์„ฑ

B-Tree ์ธ๋ฑ์Šค๋Š” ์™ผ์ชฝ ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฅธ์ชฝ ๊ฐ’์ด ์ •๋ ฌ๋˜์–ด ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ์™ผ์ชฝ ๋ถ€๋ถ„์ด ์—†์œผ๋ฉด ์ธ๋ฑ์Šค ๋ ˆ์ธ์ง€ ์Šค์บ”์ด ์•ˆ ๋œ๋‹ค.
๋‹จ์ผ ์ธ๋ฑ์Šค์˜ like ๊ฒ€์ƒ‰์—์„œ ์œ„ ์ƒํ™ฉ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

SELECT * FROM crew WHERE name like '%nez';

 

name ์ปฌ๋Ÿผ์— ์ €์žฅ๋œ ๊ฐ’์„ ํ•œ ๊ธ€์ž์”ฉ ๋น„๊ตํ•ด๊ฐ€๋ฉฐ ์ผ์น˜ํ•˜๋Š” ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฐพ์•„์•ผ ํ•˜์ง€๋งŒ, ์œ„์™€ ๊ฐ™์ด ์™ผ์ชฝ ๋ถ€๋ถ„์ด ๊ณ ์ •๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด ์ธ๋ฑ์Šค์˜ ํšจ๊ณผ๋ฅผ ๋ณด๊ธฐ ์–ด๋ ต๋‹ค.

๋˜ํ•œ, ๋ณตํ•ฉ ์ธ๋ฑ์Šค ์ธ๋ฑ์Šค์˜ ๊ฒฝ์šฐ ์„ ํ–‰ ์ปฌ๋Ÿผ์ด ์—†๋‹ค๋ฉด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

SELECT * FROM crew WHERE age >= 20;

 

์—ฌ๊ธฐ์„œ course ์ •๋ณด์— ๋Œ€ํ•œ ์กฐ๊ฑด์ ˆ์ด ์•„๋‹Œ, age์— ๋Œ€ํ•œ ์กฐ๊ฑด์ ˆ์ด๋ผ๋ฉด ํšจ์œจ์ ์œผ๋กœ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

 


๐Ÿ’ฌ ๊ฐ€์šฉ์„ฑ๊ณผ ํšจ์œจ์„ฑ ํŒ๋‹จ

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


- NOT EQUAL ๋น„๊ต

WHERE name <> ‘journey’
WHERE name NOT IN (’journey’, ‘hello’)
WHERE age NOT BETWEEN 20 AND 23
WHERE name IS NOT NULL

 

- LIKE ‘%??’

WHERE name LIKE ‘%ney’
WHERE name LIKE ‘_ney’
WHERE name LIKE ‘%our%’


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

WHERE SUBSTRING (name, 1, 1) = ‘J’
WHERE DAYOFMONTH(date) = 1


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

WHERE name = function()


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

WHERE char_column = 20


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

WHERE utf8_bin_char_column = euckr_bin_char_column

์ฐธ๊ณ ๋กœ, MySQL์—์„œ๋Š” NULL๋„ ์ธ๋ฑ์Šค์— ์ €์žฅ๋œ๋‹ค.

๋‹ค์ค‘ ์ปฌ๋Ÿผ ์ธ๋ฑ์Šค๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒฝ์šฐ์— ์ ์šฉ์ด ์•ˆ ๋œ๋‹ค.

CREATE INDEX idx_example (col_1, col_2, col_3, ... col_n)

 

- col_1์— ๋Œ€ํ•œ ๋น„๊ต ์กฐ๊ฑด์ด ์—†๋Š” ๊ฒฝ์šฐ
- col_1์— ๋Œ€ํ•œ ๋น„๊ต ์กฐ๊ฑด์ด ์œ„์—์„œ ๋ดค๋˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์— ์†ํ•˜๋Š” ๊ฒฝ์šฐ

 

์ ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. (i๋Š” 2 ์ด์ƒ n ๋ฏธ๋งŒ)
- col_1 ~ col_(i-1)๊นŒ์ง€ ๋™๋“ฑ ๋น„๊ต ํ˜•ํƒœ์ผ ๋•Œ (=์ด๋‚˜ in)
- col_i์— ๋Œ€ํ•ด ๋™๋“ฑ ๋น„๊ต (=์ด๋‚˜ in), ํฌ๊ณ  ์ž‘์Œ ๋น„๊ต (<, >), like๋กœ ์ขŒ์ธก ์ผ์น˜ ๋น„๊ต (like ‘jour%’)
์ด๋•Œ col_1 ~ col_i๋Š” ์ž‘์—… ๋ฒ”์œ„ ๊ฒฐ์ • ์กฐ๊ฑด์œผ๋กœ, col_i+1 ~ col_n์€ ์ฒดํฌ ์กฐ๊ฑด์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

Comments