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

[๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค] ์ธ๋ฑ์Šค(Index)

1eehyunji 2023. 9. 28. 22:46

์ธ๋ฑ์Šค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ํ•˜๋‚˜์˜ ์žฅ์น˜์ด๋‹ค.

B-ํŠธ๋ฆฌ

์ธ๋ฑ์Šค๋Š” ๋ณดํ†ต B-ํŠธ๋ฆฌ๋ผ๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ์ด๋Š” ๋ฃจํŠธ ๋…ธ๋“œ, ๋ฆฌํ”„ ๋…ธ๋“œ, ๋ธŒ๋žœ์น˜ ๋…ธ๋“œ๋กœ ๋‚˜๋‰œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์„ค๋ช…ํ•˜์ž๋ฉด ๋‹ค์Œ ๊ทธ๋ฆผ๊ณผ ๊ฐ™๋‹ค.

ํ‚ค๊ฐ€ "57"์ธ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ณผ์ •์ด๋ผ๊ณ  ๊ฐ€์ •ํ•˜์ž.

ํŠธ๋ฆฌ ํƒ์ƒ‰์€ ๋งจ ์œ„ ๋ฃจํŠธ ๋…ธ๋“œ๋ถ€ํ„ฐ ํƒ์ƒ‰์ด ์ผ์–ด๋‚˜๋ฉฐ, ๋ธŒ๋žœ์น˜ ๋…ธ๋“œ๋ฅผ ๊ฑฐ์ณ ๋ฆฌํ”„ ๋…ธ๋“œ๊นŒ์ง€ ๋‚ด๋ ค์˜จ๋‹ค.

๊ฐ ๋…ธ๋“œ์˜ ์‹œ์ž‘๋ถ€ํ„ฐ 57๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€ ์ˆ˜๋ฅผ ๋งŒ๋‚  ๋•Œ๊นŒ์ง€ ์ •๋ ฌ๋œ ๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํƒ์ƒ‰ํ•œ๋‹ค.

์ฆ‰, ๋ฃจํŠธ ๋…ธ๋“œ์˜ ๊ฒฝ์šฐ 39,83์„ ๊ฑฐ์น˜๊ณ , ๊ทธ ๋ฐ‘์˜ ๋ธŒ๋žœ์น˜ ๋…ธ๋“œ๋กœ ๋‚ด๋ ค์™€์„œ 46,53,57์„ ๊ฑฐ์น˜๊ณ , ๊ทธ ๋ฐ‘์˜ ๋ฆฌํ”„ ๋…ธ๋“œ๋กœ ๋‚ด๋ ค์™€์„œ 55,57์„ ๊ฑฐ์ณ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๋Š”๋‹ค.

๋ฃจํŠธ ๋…ธ๋“œ์—์„œ ์‹œ์ž‘ํ•ด์„œ ๋ฆฌํ”„ ๋…ธ๋“œ๊นŒ์ง€ ๋„๋‹ฌํ•ด์„œ ์ฐพ์€ 57์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐ์ดํ„ฐ ํฌ์ธํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

์ธ๋ฑ์Šค๊ฐ€ ํšจ์œจ์ ์ธ ์ด์œ ์™€ ๋Œ€์ˆ˜ ํ™•์žฅ์„ฑ

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

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

ํŠธ๋ฆฌ์˜ ๋Œ€์ˆ˜ํ™•์žฅ์„ฑ

 ์œ„ ํ‘œ์ฒ˜๋Ÿผ ํŠธ๋ฆฌ ๊นŠ์ด๊ฐ€ 10์ผ ๋•Œ, ์•ฝ 100๋งŒ๊ฐœ์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•

์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์€ DBMS๋งˆ๋‹ค ๋‹ค๋ฅด๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ MySQL์„ ๊ธฐ์ค€์œผ๋กœ ์„ค๋ช…ํ•˜๊ฒ ๋‹ค!

MySQL

MySQL์˜ ๊ฒฝ์šฐ ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค์™€ ์„ธ์ปจ๋”๋ฆฌ ์ธ๋ฑ์Šค๊ฐ€ ์žˆ๋‹ค. 

ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค๋Š” ํ…Œ์ด๋ธ”๋‹น ํ•˜๋‚˜๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. Primary key ์˜ต์…˜์œผ๋กœ ๊ธฐ๋ณธํ‚ค๋กœ ๋งŒ๋“ค์–ด์„œ ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜, ๊ธฐ๋ณธํ‚ค๋กœ ๋งŒ๋“ค์ง€ ์•Š๊ณ  unique not null ์˜ต์…˜์„ ๋ถ™์—ฌ์„œ ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜๋„ ์žˆ๋‹ค. 

์œ„ ๋‘๊ฐ€์ง€ ์˜ต์…˜์ด ๋™์‹œ์— ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ์—” primary key ์˜ต์…˜์ด ๋ถ™์€ ํ•„๋“œ๊ฐ€ ์šฐ์„ ์ ์œผ๋กœ ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค๊ฐ€ ๋œ๋‹ค.

ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋Š” ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ž๋™ ์ •๋ ฌ๋œ๋‹ค. (MySQL ์˜ ๊ฒฝ์šฐ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ)

์ถœ์ฒ˜ : https://hudi.blog/db-clustered-and-non-clustered-index/

์„ธ์ปจ๋”๋ฆฌ ์ธ๋ฑ์Šค๋Š” create index ... ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•ด์„œ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค์™€ ๋‹ฌ๋ฆฌ, ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์‹ค์ œ ํ…Œ์ด๋ธ”์„ ์ •๋ ฌํ•˜์ง„ ์•Š๋Š”๋‹ค. ๋‹ค๋งŒ, ์ •๋ ฌ๋œ ๋ณ„๋„์˜ ์ธ๋ฑ์Šค ํŽ˜์ด์ง€๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•œ๋‹ค. ๋˜, ํ•œ ํ…Œ์ด๋ธ”์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์„ธ์ปจ๋”๋ฆฌ ์ธ๋ฑ์Šค๊ฐ€ ์กด์žฌํ•  ์ˆ˜ ์žˆ๋‹ค. 

์„ธ์ปจ๋”๋ฆฌ ์ธ๋ฑ์Šค๋Š” ๋ณด์กฐ ์ธ๋ฑ์Šค๋กœ, ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ•„๋“œ ๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ฟผ๋ฆฌ๋ฅผ ๋งŽ์ด ๋ณด๋‚ผ ๋•Œ ์ƒ์„ฑํ•ด์•ผ ํ•˜๋Š” ์ธ๋ฑ์Šค์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, age๋ผ๋Š” ํ•˜๋‚˜์˜ ํ•„๋“œ๋งŒ์œผ๋กœ ์ฟผ๋ฆฌ๋ฅผ ๋ณด๋‚ธ๋‹ค๋ฉด ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค๋งŒ์œผ๋กœ ์ถฉ๋ถ„ํ•˜๋‹ค. ํ•˜์ง€๋งŒ, age, name, email ๋“ฑ ๋‹ค์–‘ํ•œ ํ•„๋“œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ฟผ๋ฆฌ๋ฅผ ๋ณด๋‚ผ ๋•Œ๋Š” ์„ธ์ปจ๋”๋ฆฌ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. 

์ถœ์ฒ˜ : https://hudi.blog/db-clustered-and-non-clustered-index/