Indexing - Suja-dot/Database GitHub Wiki

Index?

  • ์ถ”๊ฐ€์ ์ธ ์“ฐ๊ธฐ ์ž‘์—…๊ณผ ์ €์žฅ ๊ณต๊ฐ„์„ ํ™œ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์˜ ๊ฒ€์ƒ‰ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ๋„ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋ฉด ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ์™€ ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜๋ฅผ ํฌํ•จํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋น ๋ฅด๊ฒŒ ์กฐํšŒ๊ฐ€ ๊ฐ€๋Šฅ
  • SELECT, UPDATE, DELETE์˜ ์„ฑ๋Šฅ์ด ํ•จ๊ป˜ ํ–ฅ์ƒ๋จ (์œ„ ์—ฐ์‚ฐ๋“ค์„ ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด ํ•ด๋‹น ๋Œ€์ƒ์„ ์กฐํšŒํ•ด์•ผ๋งŒ ์ž‘์—…์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์—)
  • e.g. ์ฑ…์˜ ์ƒ‰์ธ

Index ๊ด€๋ฆฌ

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

INDEX ์žฅ์ 

  • ํ…Œ์ด๋ธ”์„ ์กฐํšŒํ•˜๋Š” ์†๋„์™€ ๊ทธ์— ๋”ฐ๋ฅธ ์„ฑ๋Šฅํ–ฅ์ƒ
  • ์ „๋ฐ˜์ ์ธ ์‹œ์Šคํ…œ ๋ถ€ํ•˜ ๊ฐ์†Œ
  • e.g. ๊ทœ๋ชจ๊ฐ€ ์ž‘์ง€ ์•Š์€ ํ…Œ์ด๋ธ”, INSERT, UPDATE, DELETE๊ฐ€ ์ž์ฃผ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ์ปฌ๋Ÿผ, JOIN์ด๋‚˜ WHERE๋˜๋Š” ORDER BYE์— ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์ปฌ๋Ÿผ, ๋ฐ์ดํ„ฐ์˜ ์ค‘๋ณต๋„๊ฐ€ ๋‚ฎ์€ ์ปฌ๋Ÿผ์—์„œ ์‚ฌ์šฉ๋˜๋ฉด ์ข‹์Œ

INDEX ๋‹จ์ 

  • INDEX๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ DB์— ๋ณ„๋„๋กœ ์•ฝ 10%์— ํ•ด๋‹นํ•˜๋Š” ์ €์žฅ๊ณต๊ฐ„์ด ํ•„์š”
  • ์ธ๋ฑ์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ถ”๊ฐ€ ์ž‘์—…์ด ํ•„์š”
  • ์ธ๋ฑ์Šค๋ฅผ ์ž˜๋ชป ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์˜คํžˆ๋ ค ์„ฑ๋Šฅ ์ €ํ•˜๋˜๋Š” ์—ญํšจ๊ณผ ๋ฐœ์ƒ
  • e.g. CREATE, DELETE, UPDATE๊ฐ€ ๋นˆ๋ฒˆํ•œ ์†์„ฑ์— ์ธ๋ฑ์Šค๋ฅผ ๊ฑธ๊ฒŒ ๋˜๋ฉด ์ธ๋ฑ์Šค์˜ ํฌ๊ธฐ๊ฐ€ ๋น„๋Œ€ํ•ด์ ธ์„œ ์„ฑ๋Šฅ์ด ์˜คํžˆ๋ ค ์ €ํ•˜๋˜๋Š” ์—ญํšจ๊ณผ ๋ฐœ์ƒ(DELETE์™€ UPDATE ์—ฐ์‚ฐ์‹œ ์ธ๋ฑ์Šค๋ฅผ ์‚ญ์ œํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ)

INDEX์˜ ์ž๋ฃŒ๊ตฌ์กฐ

Hash Table

  • ๋ฐ์ดํ„ฐ, ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜๋ฅผ Key, Value๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์ปฌ๋Ÿผ์˜ ๊ฐ’์œผ๋กœ ์ƒ์„ฑ๋œ ํ•ด์‹œ๋ฅผ ํ†ตํ•ด ์ธ๋ฑ์Šค ๊ตฌํ˜„
  • ์‹œ๊ฐ„๋ณต์žก๋„ O(1)
  • ํ•ด์‹œ๋Š” ๋“ฑํ˜ธ(=)์—ฐ์‚ฐ์—๋งŒ ํŠนํ™”๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ’์ด 1์ด๋ผ๋„ ๋‹ฌ๋ผ์ง€๋งŒ ์™„์ „ํžˆ ๋‹ค๋ฅธ ํ•ด์‹œ๊ฐ’์„ ์ƒ์„ฑํ•˜๋Š”๋ฐ, ์ด๋Ÿฌํ•œ ํŠน์„ฑ์— ์˜ํ•ด ๋ถ€๋“ฑํ˜ธ ์—ฐ์‚ฐ(>,<)์ด ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ๊ฒ€์ƒ‰์„ ์œ„ํ•ด์„œ๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š์Œ
  • ์ด๋Ÿฌํ•œ ์ด์œ ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ธ๋ฑ์Šค์—์„œ๋Š” B+ Tree๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋จ
  • e.g. "์˜ค๋Š˜"์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ธฐ ์œ„ํ•œ ์ฟผ๋ฆฌ๋ฌธ์€ ์ธ๋ฑ์Šค์˜ ํ˜œํƒ์„ ์ „ํ˜€ ๋ฐ›์ง€ ๋ชปํ•จ

B+ Tree

  • ๋ฆฌํ”„๋…ธ๋“œ๋งŒ ์ธ๋ฑ์Šค์™€ ํ•จ๊ป˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , ๋‚˜๋จธ์ง€ ๋…ธ๋“œ๋“ค์€ ๋ฐ์ดํ„ฐ๋ฅผ ์œ„ํ•œ ์ธ๋ฑ์Šค ๋งŒ์„ ๊ฐ–๋Š” ๊ตฌ์กฐ
  • ๋ฆฌํ”„ ๋…ธ๋“œ๋“ค์€ LinkedList๋กœ ์—ฐ๊ฒฐ๋˜์–ด์žˆ์Œ
  • ๋ฐ์ดํ„ฐ ๋…ธ๋“œ ํฌ๊ธฐ๋Š” ์ธ๋ฑ์Šค ๋…ธ๋“œ์˜ ํฌ๊ธฐ์™€ ๊ฐ™์ง€ ์•Š์•„๋„ ๋œ๋‹ค
  • ์‹œ๊ฐ„๋ณต์žก๋„ O(log2N)