ํ”ผ๋“œ๋กœ ๋Œ์•„๊ฐ€๊ธฐ
MongoDB Indexes Finally Clicked for Me: Understanding Indexes, Compound Indexes & the Prefix Rule ๐Ÿš€
Dev.toDev.to
Database

Prefix Rule ๊ธฐ๋ฐ˜์˜ Compound Index ์„ค๊ณ„๋ฅผ ํ†ตํ•œ ์ฟผ๋ฆฌ ์ตœ์ ํ™”

MongoDB Indexes Finally Clicked for Me: Understanding Indexes, Compound Indexes & the Prefix Rule ๐Ÿš€

aarthirs2026๋…„ 6์›” 24์ผ8๋ถ„intermediate

Context

๋Œ€๊ทœ๋ชจ ํŠธ๋žœ์žญ์…˜ ๋ฐ์ดํ„ฐ ์กฐํšŒ ์‹œ ๋ฐœ์ƒํ•˜๋Š” Collection Scan์œผ๋กœ ์ธํ•œ ์„ฑ๋Šฅ ์ €ํ•˜ ํ•ด๊ฒฐ ํ•„์š”. ๋‹จ์ˆœ ๋‹จ์ผ ์ธ๋ฑ์Šค๋งŒ์œผ๋กœ๋Š” ๋‹ค์ค‘ ์กฐ๊ฑด ํ•„ํ„ฐ๋ง๊ณผ ์ •๋ ฌ ์š”๊ตฌ์‚ฌํ•ญ์„ ๋™์‹œ์— ์ถฉ์กฑํ•˜๊ธฐ ์–ด๋ ค์šด ๊ตฌ์กฐ์  ํ•œ๊ณ„ ์กด์žฌ.

Technical Solution

  • Prefix Rule์„ ์ ์šฉํ•˜์—ฌ ์ตœ์ขŒ์ธก ํ•„๋“œ๋ถ€ํ„ฐ ์ˆœ์ฐจ์ ์œผ๋กœ ํƒ์ƒ‰ํ•˜๋Š” Compound Index ๊ตฌ์กฐ ์„ค๊ณ„
  • user ํ•„๋“œ๋ฅผ ๊ณตํ†ต Prefix๋กœ ์„ค์ •ํ•˜๊ณ  date, type, category๋ฅผ ๊ฐ๊ฐ ๋ณ„๋„ ์ธ๋ฑ์Šค๋กœ ๊ตฌ์„ฑํ•˜์—ฌ ๋‹ค์–‘ํ•œ ์ฟผ๋ฆฌ ํŒจํ„ด ๋Œ€์‘
  • ์ธ๋ฑ์Šค ๋‚ด ๋ฐ์ดํ„ฐ ์ •๋ ฌ ์ˆœ์„œ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ณ„๋„์˜ ๋ฉ”๋ชจ๋ฆฌ ์ •๋ ฌ ๊ณผ์ • ์—†์ด .sort() ์—ฐ์‚ฐ ์ตœ์ ํ™”
  • ์ธ๋ฑ์Šค์™€ ์‹ค์ œ Document๋ฅผ ๋ถ„๋ฆฌ ์ €์žฅํ•˜๋Š” B-Tree ๊ธฐ๋ฐ˜ ์ฐธ์กฐ ๊ตฌ์กฐ๋ฅผ ํ†ตํ•œ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ฒฝ๋กœ ๋‹จ์ถ•
  • ๋ฌด๋ถ„๋ณ„ํ•œ ๋‹ค์ค‘ ํ•„๋“œ ํ†ตํ•ฉ ์ธ๋ฑ์Šค ๋Œ€์‹  ์‹ค์ œ Application์˜ ์ฟผ๋ฆฌ ํŒจํ„ด์— ๋งž์ถ˜ ์ธ๋ฑ์Šค ์„ธ๋ถ„ํ™” ์ „๋žต ์ฑ„ํƒ

- Compound Index ์„ค๊ณ„ ์‹œ ์ตœ์ขŒ์ธก ํ•„๋“œ(Leftmost Prefix)๊ฐ€ ์ฟผ๋ฆฌ ์กฐ๊ฑด์— ํฌํ•จ๋˜๋Š”์ง€ ํ™•์ธ - ์ธ๋ฑ์Šค ํ•„๋“œ ์ˆœ์„œ๋ฅผ ๊ฒฐ์ •ํ•  ๋•Œ ํ•„ํ„ฐ๋ง ํšจ์œจ์ด ๊ฐ€์žฅ ๋†’์€ ํ•„๋“œ๋ฅผ ์•ž์ชฝ์— ๋ฐฐ์น˜ - Read ์„ฑ๋Šฅ ํ–ฅ์ƒ์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋Š” Write ์ง€์—ฐ ๋ฐ ์ €์žฅ ๊ณต๊ฐ„ ์ฆ๊ฐ€ ๋น„์šฉ(Trade-off) ์‚ฐ์ • - ๋ชจ๋“  ํ•„๋“œ๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฑฐ๋Œ€ ์ธ๋ฑ์Šค๋ณด๋‹ค ๋นˆ๋ฒˆํ•œ ์ฟผ๋ฆฌ ํŒจํ„ด๋ณ„ ์ตœ์ ํ™”๋œ ์†Œํ˜• ์ธ๋ฑ์Šค ์กฐํ•ฉ ๊ฒ€ํ† 

์›๋ฌธ ์ฝ๊ธฐ