Index

Index

Database์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•  ๋•Œ, ์ ์žฌ๋œ ๋ฐ์ดํ„ฐ์˜ ์–‘์ด ๋งค์šฐ ๋งŽ๊ฑฐ๋‚˜, ๋งŽ์•„์งˆ ๊ฒƒ์ด ์ž๋ช…ํ•œ ๊ฒฝ์šฐ.

๋ณดํ†ต Index๋ฅผ ํŠน์ • column์— ์ ์šฉํ•จ์œผ๋กœ์จ ์ฟผ๋ฆฌ์˜ ์„ฑ๋Šฅ์„ ํ•ด๊ฒฐํ•˜๋ ค๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

์˜ค๋Š˜์€ ๋‹ค์Œ ๋‘ ๋‹จ๊ณจ ์งˆ๋ฌธ์— ๋Œ€ํ•ด์„œ ์ •๋ฆฌํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

  • Index๋ฅผ ์ ์šฉํ•˜๋ฉด ์–ด๋–ค ์›๋ฆฌ๋กœ ์ฟผ๋ฆฌ ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋˜๋Š” ๊ฒƒ์ผ๊นŒ?

  • Index๋ฅผ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ฌด์กฐ๊ฑด ์ข‹์€๊ฐ€?

About Index

์ธ๋ฑ์Šค๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ์˜ ์†๋„๋ฅผ ๋†’์—ฌ์ฃผ๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ๋‹ค.

ํŠน์ • ์ปฌ๋Ÿผ์— ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ฉด, ํ•ด๋‹น ์ปฌ๋Ÿผ์˜ ๋ฐ์ดํ„ฐ๋“ค์„ ์ •๋ ฌํ•˜์—ฌ ๋ณ„๋„์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ๋ฐ์ดํ„ฐ์˜ ๋ฌผ๋ฆฌ์  ์ฃผ์†Œ์™€ ํ•จ๊ป˜ ์ €์žฅ๋œ๋‹ค.

์•„๋ž˜ ๊ทธ๋ฆผ์„ ๋ณด๋ฉด ํŠน์ • ์ปฌ๋Ÿผ์— ์ธ๋ฑ์Šค๊ฐ€ ์ƒ์„ฑ๋์„ ๋•Œ ์ปฌ๋Ÿผ์˜ ๋ฐ์ดํ„ฐ๋“ค์„ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ ๋ชจ์Šต์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

https://choicode.tistory.com/27

์ธ๋ฑ์Šค์˜ ๊ฐ€์žฅ ํฐ ํŠน์ง•์€ ๋ฐ์ดํ„ฐ๋“ค์ด ์ •๋ ฌ์ด ๋˜์–ด์žˆ๋‹ค๋Š” ์ ์ด๋‹ค.

์ด ํŠน์ง•์œผ๋กœ ์ธํ•ด ์กฐ๊ฑด ๊ฒ€์ƒ‰์ด๋ผ๋Š” ์˜์—ญ์—์„œ ๊ต‰์žฅํ•œ ์žฅ์ ์ด ๋œ๋‹ค.

WHERE ์ ˆ์˜ ํšจ์œจ์„ฑ

ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค๊ณ  ์•ˆ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์Œ“์ด๊ฒŒ ๋˜๋ฉด ํ…Œ์ด๋ธ”์˜ ๋ ˆ์ฝ”๋“œ(row : ํ–‰)๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ์ˆœ์„œ๊ฐ€ ์—†์ด ๋’ค์ฃฝ๋ฐ•์ฃฝ์œผ๋กœ ์ €์žฅ์ด ๋œ๋‹ค.

๊ทธ ๊ฒฐ๊ณผ, WHERE ์ ˆ์— ํŠน์ • ์กฐ๊ฑด์— ๋งž๋Š” ๋ฐ์ดํ„ฐ๋“ค์„ ๊ฒ€์ƒ‰ํ•  ๋•Œ ํ’€์Šค์บ”์„ ํ•ด์„œ ๋น„๊ตํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ์ธ๋ฑ์Šค ํ…Œ์ด๋ธ” ์Šค์บ”(Index Table Scan) ์‹œ ์ธ๋ฑ์Šค ํ…Œ์ด๋ธ”์€ ๋ฐ์ดํ„ฐ๋“ค์ด ์ •๋ ฌ๋˜์–ด ์ €์žฅ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ์กฐ๊ฑด(WHERE)์— ๋งž๋Š” ๋ฐ์ดํ„ฐ๋“ค์„ ๋น ๋ฅด๊ฒŒ ์ฐพ์•„๋‚ผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

์ด๊ฒƒ์ด ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ€์žฅ ํฐ ์ด์œ ์ด๋‹ค.

ORDER BY ์ ˆ์˜ ํšจ์œจ์„ฑ

์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ORDER BY์— ์˜ํ•œ ์ •๋ ฌ(Sort) ๊ณผ์ •์„ ํ”ผํ•  ์ˆ˜๊ฐ€ ์žˆ๋‹ค.

ORDER BY๋Š” ๊ต‰์žฅํžˆ ๋ถ€ํ•˜๊ฐ€ ๋งŽ์ด ๊ฑธ๋ฆฌ๋Š” ์ž‘์—…์ด๋‹ค.

์ •๋ ฌ๊ณผ ๋™์‹œ์— 1์ฐจ์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ •๋ ฌ์ด ์ด๋ฃจ์–ด์ง€๊ณ  ๋ฉ”๋ชจ๋ฆฌ๋ณด๋‹ค ํฐ ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค๋ฉด ๋””์Šคํฌ I/O๋„ ์ถ”๊ฐ€์ ์œผ๋กœ ๋ฐœ์ƒ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋””์Šคํฌ I/O๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ๋ณ€๊ฒฝํ•  ๋•Œ HDD์— ์ €์žฅ๋˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋Ÿฌํ•œ ์ „๋ฐ˜์ ์ธ ์ž์›์˜ ์†Œ๋ชจ๋ฅผ ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

MIN, MAX์˜ ํšจ์œจ์ ์ธ ์ฒ˜๋ฆฌ

์ด๊ฒƒ ๋˜ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ •๋ ฌ๋˜์–ด ์žˆ๊ธฐ์— ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์žฅ์ ์ด๋‹ค.

MIN๊ฐ’๊ณผ MAX๊ฐ’์„ ๋ ˆ์ฝ”๋“œ์˜ ์‹œ์ž‘ ๊ฐ’๊ณผ ๋ ๊ฐ’๋งŒ ๊ฐ€์ ธ์˜ค๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ’€์Šค์บ”์œผ๋กœ ์ž‘์—…ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ํšจ์œจ์ ์ด๋‹ค.

Cons of Index

์ธ๋ฑ์Šค์˜ ๊ฐ€์žฅ ํฐ ๋ฌธ์ œ์ ์€ ์ •๋ ฌ๋œ ์ƒํƒœ๋ฅผ ๊ณ„์† ์œ ์ง€์‹œ์ผœ์ค˜์•ผ ํ•œ๋‹ค๋Š” ์ ์ด๋‹ค.

DML

INSERT, UPDATE, DELETE๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๊ฐ€ ์ถ”๊ฐ€๋˜๊ฑฐ๋‚˜ ๊ฐ’์ด ๋ฐ”๋€๋‹ค๋ฉด ์ธ๋ฑ์Šค ํ…Œ์ด๋ธ” ๋‚ด์— ์žˆ๋Š” ๊ฐ’๋“ค์„ ๋‹ค์‹œ ์ •๋ ฌ์„ ํ•ด์•ผ ํ•œ๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— DML์ด ๋นˆ๋ฒˆํ•œ ํ…Œ์ด๋ธ”๋ณด๋‹ค ๊ฒ€์ƒ‰์„ ์œ„์ฃผ๋กœ ํ•˜๋Š” ํ…Œ์ด๋ธ”์— ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

์ฃผ๋ฌธ๋ฐ์ดํ„ฐ, ๊ฑฐ๋ž˜๋ฐ์ดํ„ฐ์™€ ๊ฐ™์ด DML์ด ๋นˆ๋ฒˆํ•œ ํ…Œ์ด๋ธ”์— ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ฒŒ ๋˜๋ฉด ์˜คํžˆ๋ ค ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ๋‹ค.

์†๋„ ํ–ฅ์ƒ์„ ์œ„ํ•ด ์ธ๋ฑ์Šค๋ฅผ ๋งŽ์ด ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ์ข‹์ง€ ์•Š๋‹ค.

์ธ๋ฑ์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์•ฝ 10%์— ํ•ด๋‹นํ•˜๋Š” ์ €์žฅ๊ณต๊ฐ„์ด ์ถ”๊ฐ€๋กœ ํ•„์š”ํ•˜๋‹ค.

๋ฌดํ„ฑ๋Œ€๊ณ  ์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“ค์–ด์„œ๋Š” ๊ฒฐ์ฝ” ์•ˆ ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

์ฆ‰, ์†๋„ ํ–ฅ์ƒ์— ๋น„ํ•ด ๋‹จ์ ๋“ค์˜ COST๋ฅผ ๋น„๊ตํ•ด์„œ ์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“ค์ง€ ๋ง์ง€๋ฅผ ์ •ํ•ด์•ผ ํ•œ๋‹ค.

Data structure of Index

์šฐ์„  B+ Tree์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž.

B+Tree๋Š” ์ด๋ฆ„์ฒ˜๋Ÿผ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ๋˜์–ด ์žˆ๋‹ค. ๋ฐ”์ด๋„ˆ๋ฆฌ ํŠธ๋ฆฌ๋ž‘ ๊ฐœ๋…์ ์œผ๋กœ๋Š” ๋น„์Šทํ•˜๋‹ค.

B+Tree๋Š” DB์˜ ์ธ๋ฑ์Šค๋ฅผ ์œ„ํ•ด ์ž์‹ ๋…ธ๋“œ๊ฐ€ 2๊ฐœ ์ด์ƒ์ธ B-Tree๋ฅผ ๊ฐœ์„ ์‹œํ‚จ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

B+Tree๋Š” ๋ชจ๋“  ๋…ธ๋“œ์— ๋ฐ์ดํ„ฐ(Value)๋ฅผ ์ €์žฅํ–ˆ๋˜ BTree์™€ ๋‹ค๋ฅธ ํŠน์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ Key ๊ฐ’์œผ๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ๋Š” ํ˜•ํƒœ์ธ๋ฐ, ๋‹ค๋ฅธ ์ ์€ Children ๋…ธ๋“œ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ๋ผ๋Š” ์ ์ด๋‹ค.

๋˜ํ•œ ๊ฐ๊ฐ์˜ ๋…ธ๋“œ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์•„๋‹Œ ๋””์Šคํฌ์— ์žˆ๋‹ค.

์•„๋ž˜ ๊ทธ๋ฆผ์„ ์ฐธ์กฐํ•˜์ž. ๊ฐ ๋…ธ๋“œ๋“ค์ด ๋””์Šคํฌ์— ์ €์žฅ๋˜์–ด ์žˆ๊ณ  ํฌ์ธํ„ฐ๋กœ ์ฐพ์•„๊ฐ€๋Š” ๋ฐฉ์‹์ด๋‹ค.

https://commons.wikimedia.org/w/index.php?curid=10758840

๋˜ํ•œ ๊ฐ leaf๋…ธ๋“œ๋Š” ํ˜•์ œ ๋…ธ๋“œ(sibling)์œผ๋กœ ๊ฐ€๋Š” ํฌ์ธํ„ฐ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— range query์— ํšจ์œจ์ ์ด๋‹ค.

๊ทธ ๋‹ค์Œ์œผ๋กœ๋Š” Hash Table ์ด ์žˆ๋‹ค.

Hash table

ํ•ด์‹œ ํ…Œ์ด๋ธ” ๊ธฐ๋ฐ˜์˜ DB ์ธ๋ฑ์Šค๋Š” (๋ฐ์ดํ„ฐ=์ปฌ๋Ÿผ์˜ ๊ฐ’, ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜)๋ฅผ (Key, Value)๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์ปฌ๋Ÿผ์˜ ๊ฐ’์œผ๋กœ ์ƒ์„ฑ๋œ ํ•ด์‹œ๋ฅผ ํ†ตํ•ด ์ธ๋ฑ์Šค๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.

ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(1)์ด๋ฉฐ ๋งค์šฐ ๋น ๋ฅธ ๊ฒ€์ƒ‰์„ ์ง€์›ํ•œ๋‹ค.

ํ•˜์ง€๋งŒ DB ์ธ๋ฑ์Šค์—์„œ ํ•ด์‹œ ํ…Œ์ด๋ธ”์ด ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ๋Š” ์ œํ•œ์ ์ธ๋ฐ, ๊ทธ๋Ÿฌํ•œ ์ด์œ ๋Š” ํ•ด์‹œ๊ฐ€ ๋“ฑํ˜ธ(=) ์—ฐ์‚ฐ์—๋งŒ ํŠนํ™”๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

ํ•ด์‹œ ํ•จ์ˆ˜๋Š” ๊ฐ’์ด 1์ด๋ผ๋„ ๋‹ฌ๋ผ์ง€๋ฉด ์™„์ „ํžˆ ๋‹ค๋ฅธ ํ•ด์‹œ ๊ฐ’์„ ์ƒ์„ฑํ•˜๋Š”๋ฐ, ์ด๋Ÿฌํ•œ ํŠน์„ฑ์— ์˜ํ•ด ๋ถ€๋“ฑํ˜ธ ์—ฐ์‚ฐ(>, <)์ด ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฒ€์ƒ‰์„ ์œ„ํ•ด์„œ๋Š” ํ•ด์‹œ ํ…Œ์ด๋ธ”์ด ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค.

Last updated