Index


๐Ÿ’ก Database์—์„œ Index๋ž€?

์ธ๋ฑ์Šค๋ž€ โ€œ์ถ”๊ฐ€์ ์ธ ์“ฐ๊ธฐ ์ž‘์—…๊ณผ ์ €์žฅ ๊ณต๊ฐ„์„ ํ™œ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์˜ ๊ฒ€์ƒ‰ ์†๋„๋ฅผ

ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐโ€์ด๋‹ค. ์ด๋Ÿฌํ•œ ์ธ๋ฑ์Šค๋Š” ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ’์œผ๋กœ ๋งŒ๋“ค์–ด์ง„

์›๋ณธ ํ…Œ์ด๋ธ”์˜ ์‚ฌ๋ณธ์ด๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค.

๋งŒ์•ฝ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ์ปฌ๋Ÿผ์„ ์กฐํšŒํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด๋ผ๋ฉด ์ „์ฒด๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” Full Scan์„

์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ DB ์ „์ฒด๋ฅผ ๋น„๊ตํƒ์ƒ‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜๋ฆฌ ์†๋„๊ฐ€ ๋–จ์–ด์ง„๋‹ค.

๋˜ํ•œ CREATE, DELETE, UPDATE๊ฐ€ ๋นˆ๋ฒˆํ•œ ์†์„ฑ์— ์ธ๋ฑ์Šค๋ฅผ ๊ฑธ๊ฒŒ ๋˜๋ฉด ์ธ๋ฑ์Šค์˜ ํฌ๊ธฐ๊ฐ€ ๋น„๋Œ€ํ•ด์ ธ์„œ

์„ฑ๋Šฅ์ด ์˜คํžˆ๋ ค ์ €ํ•˜๋˜๋Š” ์—ญํšจ๊ณผ๋ฅผ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

์ •๋ฆฌํ•ด๋ณด์ž๋ฉด, ์ธ๋ฑ์Šค๋Š” โ€œ๊ฒ€์ƒ‰โ€์— ์ตœ์ ํ™”๋œ ๊ธฐ๋Šฅ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ƒ์„ฑ, ์‚ญ์„ธ, ์ˆ˜์ •์ด ์ž์ฃผ ์ผ์–ด๋‚˜๋Š”

ํ…Œ์ด๋ธ”์—์„œ๋Š” ์‚ฌ์šฉ์„ ์•ˆํ•˜๋Š” ํŽธ์ด ์ข‹์„๊ฒƒ ๊ฐ™๋‹ค.



๐Ÿ’ก Index์˜ ๋™์ž‘์›๋ฆฌ

โ’ˆ Index Table(์›๋ณธ ํ…Œ์ด๋ธ”์˜ ์‚ฌ๋ณธ)์—์„œ where์ ˆ์— ํฌํ•จ๋œ ๊ฐ’์„ ์ฐพ๋Š”๋‹ค.

โ’‰ ํ•ด๋‹น ๊ฐ’์˜ id ๊ฐ’์„ ๊ฐ€์ ธ์˜จ๋‹ค.

โ’Š ๊ฐ€์ ธ์˜จ id๊ฐ’์œผ๋กœ ์›๋ณธ ํ…Œ์ด๋ธ”์—์„œ ๊ฐ’์„ ์กฐํšŒํ•œ๋‹ค.


์•„๋ž˜ ์‚ฌ์ง„์„ ๋ณด๋ฉด Indexes์— Index Table์ด ์ƒ์„ฑ๋œ๊ฑธ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์ฟผ๋ฆฌ๋ฌธ์„ ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์„ฑํ•˜์˜€์„ ๋•Œ

SELECT * FROM table WHRER user_id=โ€Johnโ€

Index๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ John์ด ์–ด๋–ค ๋ธ”๋ก์— ๋“ค์–ด ์žˆ๋Š”์ง€ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ db buffer cache๋กœ

๋ณต์‚ฌํ•œ ํ›„ ํ•˜๋‚˜ํ•˜๋‚˜ ์ฐพ๋Š”๋‹ค. ๋ฐ˜๋ฉด Index๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ where์ ˆ์˜ ์ปฌ๋Ÿผ(user_id)์˜ index๊ฐ€ ๋งŒ๋“ค์–ด์ ธ ์žˆ๋Š”์ง€

ํ™•์ธ ํ›„, ์ธ๋ฑ์Šค์— ๋จผ์ € ๊ฐ€์„œ John์˜ ์ •๋ณด๊ฐ€ ์–ด๋–ค ROWID๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•œ ํ›„ ํ•ด๋‹น ROWID์— ์žˆ๋Š”

๋ธ”๋ก๋งŒ ์ฐพ์•„๊ฐ€์„œ db buffer cache์— ๋ณต์‚ฌํ•œ๋‹ค.



๐Ÿ’ก B-Tree

โ€œB-Treeโ€๋ž€ Balanced Tree๋กœ ๊ท ํ˜•์„ ์œ ์ง€ํ•˜๋Š” tree๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

ORACLE๊ณผ ๊ฐ™์€ ์‚ฌ์šฉ DB์—์„œ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋ฉฐ, ์™ธ๋ถ€๊ฒ€์ƒ‰์— ์œ ์šฉํ•˜๋‹ค๊ณ  ์•Œ๋ ค์ ธ ์žˆ๋‹ค.

B-Tree๋Š” ์ด์ง„ํŠธ๋ฆฌ์™€๋Š” ๋‹ฌ๋ฆฌ ํ•˜๋‚˜์˜ ๋…ธ๋“œ๊ฐ€ ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.

  • B-Tree์˜ ๊ทœ์น™
1. ๋…ธ๋“œ์˜ ๋ฐ์ดํ„ฐ ์ˆ˜๊ฐ€ N์ด๋ฉด ์ž์‹์˜ ์ˆ˜๋Š” ํ•ญ์ƒ N+1์ด ๋˜์–ด์•ผํ•œ๋‹ค.

2. ๋…ธ๋“œ ๋‚ด์˜ ๋ฐ์ดํ„ฐ๋Š” ๋ฐ˜๋“œ์‹œ ์ •๋ ฌ๋œ ์ƒํƒœ์—ฌ์•ผ ํ•œ๋‹ค.

3. ๋…ธ๋“œ์˜ ๋ฐ์ดํ„ฐ X์˜ ์™ผ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ๋Š” X๋ณด๋‹ค ์ž‘์€ ๊ฐ’๋“ค๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์–ด์•ผํ•˜๊ณ , 

   X์˜ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ๋Š” X๋ณด๋‹ค ํฐ ๊ฐ’๋“ค๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์–ด์•ผ ํ•œ๋‹ค. 

   > ์ด์ง„ํŠธ๋ฆฌ์˜ ์„ฑ์งˆ๊ณผ ์œ ์‚ฌ


๐Ÿ’ก B+Tree

โ€œB+Treeโ€๋Š” B-Tree์˜ ํ™•์žฅ๊ฐœ๋…์œผ๋กœ, ๋ฆฌํ”„ ๋…ธ๋“œ๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์•„๋‘์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—

๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋” ํ™•๋ณดํ•จ์œผ๋กœ์จ ๋” ๋งŽ์€ key๋“ค์„ ์ˆ˜์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋กœ ํ•˜๋‚˜์˜ ๋…ธ๋“œ์— ๋” ๋งŽ์€ key๋“ค์„ ๋‹ด์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํŠธ๋ฆฌ์˜ ๋†’์ด๋Š” ๋” ๋‚ฎ์•„์ง€๋ฉฐ,

cache hit ํ™•๋ฅ ์€ ๋” ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.

๋˜ํ•œ Full Scan ์‹œ, B+tree๋Š” ๋ฆฌํ”„ ๋…ธ๋“œ์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋ชจ๋‘ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•œ ๋ฒˆ์˜ ์„ ํ˜•ํƒ์ƒ‰๋งŒ

ํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— B-tree์— ๋น„ํ•ด ๋น ๋ฅด๋‹ค. ๋ฐ˜๋ฉด B-tree์˜ ๊ฒฝ์šฐ์—๋Š” ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.

๋ฆฌํ”„ ๋…ธ๋“œ๋“ค์€ Linkedlist๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค.

InnoDB ๋Š” B+tree Index ๋กœ ์ด๋ค„์ ธ ์žˆ์Œ



๐Ÿ“š References