[MongoDB] ์ธ๋ฑ์ค
๋ชฝ๊ณ ๋ํ ์ผ๋ฐ RDB์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ฑ๋ฅ์ ์ต์ ํ๋ฅผ ์ํด ์ธ๋ฑ์ค ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
๊ฐ๋จํ ํ ์คํธ๋ฅผ ์ํด ๋ฐ์ดํฐ๊ฐ ๋ง๊ฐ๋ง ๋ค์ด์๋ ์ปฌ๋ ์ ์ ์ค๋นํ๋ค.

๋์ถฉ ์ด๋ฐ์์ผ๋ก ๋ค์ด์๋ค.
์คํ ๊ณํ ํ์ธ
๋ชฝ๊ณ ๋๋น๋ RDB์ ์ ์ฌํ๊ฒ ์คํ๊ณํ์ ๊ด๋ฆฌํ๊ณ , ๊ทธ๊ฑธ ๋ณผ ์ ์๋ค. explain ํจ์๋ฅผ ํธ์ถํ๋ฉด ๋๋ค.
์์ํ ์ ๋ณด๊ฐ ๋ง์ง๋ง, ์ฐ๋ฆฌ๊ฐ ์ง๊ธ ์ฌ๊ธฐ์ ๋ด์ผํ ๊ฑด queryPlanner.winningPlan์ด๋ค.
COLLSCAN์ด๋ผ๋ ์ค์บ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ธ์ด์์ 10์ผ๋ก ํํฐ๋ฅผ ๊ฑด๋ค๋ ๋ป์ด ๋๋ค.
COLLSCAN์ ๊ธฐ์กด RDB์ ๋น๊ตํ๋ฉด ํ์ค์บ์ด๋ค. ์ ์ฒด ๋ชฉ๋ก์ ์น ๊ธ์ด์ค๋ ๊ฒ์ด๋ค.
๋น์ฐํ ์ฑ๋ฅ์ด ๋น ๋ฅด์ง๋ ์๋ค.
์ด๋ ๊ฒ ๋ง์ ๋ฐ์ดํฐ์์ ํน์ ์๊ท๋ชจ ๊ฐ๋ง ์ถ์ถํ๊ณ ์ถ์ ๋๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ฐ๋์งํ๋ค.
์ธ๋ฑ์ค ์์ฑ
์ธ๋ฑ์ค๋ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ ์ ์๋ค.
createIndex({ ์ธ๋ฑ์ค๋์A: 1 or -1, ... }, ์ต์
);
์ด๋ ๊ฒ ๋ง๋ค๋ฉด number๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก ๊ด๋ฆฌํ๋ ์ธ๋ฑ์ค๊ฐ ์๊ฒจ๋๋ค. ๋ค๋ฅธ ๊ธฐ๋ฅ๋ค๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์๋๊ฑธ ๋๋ง๋๋ คํ๋ฉด ๊ทธ๋ฅ ๋ฌด์ํ๋ค.
๋ฐ๋๋ก ๋ด๋ฆผ์ฐจ์์ผ๋ก ํ๊ณ ์ถ๋ค๋ฉด -1๋ก ์ฃผ๋ฉด ๋๋ค.
๊ทธ๋ผ ์กฐ๊ฑด์ number๋ก ๊ฑธ๋ฉด ์ด์ง๊ฐํด์๋ ์ธ๋ฑ์ค๋ฅผ ์ฐธ์กฐํด์ ๋ ๋น ๋ฅด๊ฒ ๊ธ์ด์ฌ ๊ฒ์ด๋ค.
๊ทธ๋ผ ์ด์ ๋ค์ explain์ผ๋ก ์ฐ์ด๋ณด๋ฉด
์ธ๋ฑ์ค ์ค์บ์ธ IXSCAN์ด ๋ฐ ๊ฒ์ด๋ค.
์ ์ผํค ์ธ๋ฑ์ค(Unique Index)
์ด๊ฒ๋ RDB์ ์ ์ผํค์ ๋ณ๋ก ๋ค๋ฅด์ง ์๋ค. ์ธ๋ฑ์ค์ ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ ๋ํด ์ ์ผ์ฑ(unique)๊น์ง ๋ณด์ฅํด์ฃผ๋ ๊ฒ์ด๋ค.
๋ง๋๋ ๋ฒ์ ๊ฐ๋จํ๋ค. ์ต์ ์ unique ๊ฐ๋ง true๋ก ์ฃผ๋ฉด ๋๋ค.

์ด๋ ๊ฒ ํ ์ฑ๋ก ์ด๋ฏธ ์กด์ฌํ๋ ํค๊ฐ์ ๋ ์ฝ์ ์๋๋ฅผ ํ๋ค๋ฉด, ์ค๋ณต ์ค๋ฅ๋ฅผ ๋ฐ์์ํจ๋ค.
upsert ๊ธฐ๋ฅ์ ๋ช
์์ ์ผ๋ก ์ ๊ณตํ์ง๋ ์๋๋ค.