๋ณธ ํฌ์คํ ์ ํ๊ต ์์ ์์ ์งํํ๋ ์ด๋ก ,์ค์ต์ ๋ํด ์ ๋ฆฌํ๋ ํฌ์คํ ์ ๋๋ค. ๊ณต๋ถ์ฉ์ผ๋ก ์์ฑํ๋ ํฌ์คํ ์ผ๋ก ์ค๋ฅ๊ฐ ์์ ์ ์์ต๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ธ๋ฑ์ค๋ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ํ ํต์ฌ ๋๊ตฌ๋ก์ ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์๋๋ฅผ ํ๊ธฐ์ ์ผ๋ก ํฅ์์ํฌ ์ ์๋ค.
์ด๋ฒ ๊ธ์์๋ ์ธ๋ฑ์ค์ ๊ฐ๋ , ์๋ ์๋ฆฌ, ์ฅ๋จ์ , ์ฌ์ฉ์ ์ ์์ฌํญ ๋ฑ์ ๋ค๋ค๋ณธ๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ๋ฑ์ค๋
์ธ๋ฑ์ค๋ ์ฑ ์ ์์ธ์ฒ๋ผ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์์ ํน์ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ์ฐพ์ ์ ์๋๋ก ์ค๊ณ๋ ์๋ฃ ๊ตฌ์กฐ์ด๋ค. ๋ฐ์ดํฐ ๊ฒ์ ์ ์ ์ฒด ํ ์ด๋ธ์ ์ค์บํ์ง ์๊ณ , ์ธ๋ฑ์ค๋ฅผ ํตํด ์ํ๋ ๋ฐ์ดํฐ์ ๋น ๋ฅด๊ฒ ์ ๊ทผํ ์ ์๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ๋, ์์์ ๊ฐ์ด ์ฟผ๋ฆฌ๋ฅผ ์ง๊ณ ์ ๊ทผํ๊ฒ ๋๋ฉด, ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ age ์ปฌ๋ผ์ ๋ชจ๋ ๊ฐ์ ๋ค์ง๋ฉด์ ์กฐ๊ฑด์ ๋ง๋ ๊ฐ์ ์ฐพ๊ฒ ๋๋ค.
๋ง์ฝ ๋ฐ์ดํฐ๊ฐ 100๋ง๊ฐ ์กด์ฌํ๋ฉด, 100๋ง๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ธ์ผํ๋ค.
ํ์ง๋ง ์ด๋ฌํ ์ปฌ๋ผ์ด ๋ฏธ๋ฆฌ ์ ๋ ฌ์ด ๋์ด ์๋ค๋ฉด? ์ ๋ ฌ๋ ๋ฐ์ดํฐ ์งํฉ์์ ํน์ ๊ฐ์ ๋น ๋ฅด๊ฒ ์ฐพ๋ ๊ฒ์ด ๊ฐ๋ฅํด์ง๋ค. ์กฐํ์ ์์ฃผ ์ฐ์ด๋ ํน์ ์ปฌ๋ผ์ ๋ํด์ ๋ฏธ๋ฆฌ ์ ๋ ฌ์ ํด๋๊ณ ์ ๋ ฌํ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ก ์ ์ฅํด๋๋ค๊ฐ, ํด๋น ๊ฐ์ ์กฐํํด์ผ ํ๋ ๊ฒฝ์ฐ ์ ๋ ฌ๋ ์ ์ฅ๋ณธ์ ๊ฐ์ ธ์ ํ์ ๋ฒ์๋ฅผ ํจ์จ์ ์ผ๋ก ์ค์ฌ๊ฐ๋ฉฐ ์ํ๋ ๊ฐ์ ์ฐพ์๋ด๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค.
์๋ฅผ๋ค์ด 1๋ถํฐ 100๊น์ง ์์๋๋ก ๋์ด๋ ๊ฒฝ์ฐ, ์ํ๋ ๊ฐ์ด 76๋ผ๋ฉด, ์ฐพ๊ณ ์ ํ๋ ๊ฐ๊ณผ ํ์ ์ค์ธ ์ค๊ฐ๊ฐ์ ๋น๊ตํ์ฌ, ๋์ด๋ ๋ฐ์ดํฐ๋ฅผ 50๋ถํฐ 100๊น์ง ์๋ฅด๊ณ , 50๋ถํฐ 100๊น์ง์ ์ ๋ณด๋ฅผ ๋ค์ 75๋ถํฐ 100๊น์ง ์๋ผ๋ด์ด ํ์์ ์์ํ๋ฉด ์ํ๋ ๊ฐ์ ํ๋ํ๋ ๋ฐ์ดํฐ๋ฅผ ๋น๊ตํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋น ๋ฅด๊ฒ ๊ตฌํํ ์ ์๋ค.
์ด ์ ๋ ฌ๋ ์ ์ฅ๋ณธ์ ์ธ๋ฑ์ค ๋ผ๊ณ ํ๋ค.
์ด๋ ๊ฒ ๋ ๊ฒฝ์ฐ ๋ฌธ์ ์ ์ผ๋ก๋, ์ธ๋ฑ์ค๋ฅผ ์ฌ๋ณธ์ผ๋ก ์ ์ฅํด๋ฌ์ผ ํ๊ธฐ ๋๋ฌธ์, ์ ์ฅ๊ณต๊ฐ์ ๋ ์ฐจ์งํ๊ฒ ๋๋ค๋ ๊ฒ
๊ทธ๋ฆฌ๊ณ ํ ์ด๋ธ์ ์๋ก์ด ๋ฐ์ดํฐ๊ฐ ์ถ๊ฐ๋๊ฑฐ๋ ์์ ํน์ ์ญ์ ๋ฅผ ํ๊ฒ ๋๋ฉด ์ธ๋ฑ์ค์๋ ๋ฐ์์ ํด์ค์ผํ๊ธฐ ๋๋ฌธ์ ์ฒ๋ฆฌ๋์ด ๋์ด๋ ์ฑ๋ฅ ํ๋ฝ์ด ๋ ์๋ ์๋ค.
๊ทธ๋ฆฌ๊ณ Primary key๋ก ์ง์ ๋ ๋ฐ์ดํฐ๋ ์ด๋ฏธ ์ ๋ ฌ์ด ๋์ด์๋ ์ํ์ด๊ธฐ ๋๋ฌธ์ index์์ฑ์ด ๋ฐ๋ก ํ์๊ฐ ์๋ค. -> clustered index
์ธ๋ฑ์ค ๊ตฌ์กฐ
์ธ๋ฑ์ค์ ์ฉ๋์ ๋๋ต์ ์ธ ์๋๋ฐฉ์์ ๋ค๋ฃจ์์ผ๋, ์ด์ ์ธ๋ฑ์ค๊ฐ ์ด๋ค ๊ตฌ์กฐ๋ก ๋ง๋ค์ด์ง๋์ง ์ดํด๋ณด์
์ปดํจํฐ ๋ด์์ ๋ฐ์ดํฐ ์๋ฃ๋ฅผ ์ ๋ ฌํ์ฌ ์ฌ์ฉํ๊ณ ์ถ๋ค ํ๋ฉด ๋ค์ํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฑํํ ์ ์๋ค. ์์ฃผ ์ฐ์ด๋ ์๋ฃ๊ตฌ์กฐ๋ก Array ๋๋ Linked List๋ฑ์ด ์์๊ฒ์ด๋ค. ํ์ง๋ง, ์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ธ๋ฑ์ค๋ฅผ ๋น์ ํ ์๋ฃ๊ตฌ์กฐ์ธ ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ์ ์ฅํ๋ค.
๋ฐ์ดํฐ๋ฅผ ๊ณ์ธต์ ์ผ๋ก ๊ตฌํํ์ฌ ์๊ฐ ๋ณต์ก๋๋ฅผ O(logn)๊น์ง ์ค์ด๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค. ์ด๋ ๋ฐ์ดํฐ๊ฐ ๋ง์์ง ์๋ก ์ฑ๋ฅ ์ฐจ์ด๊ฐ ๋งค์ฐ ์ปค์ง์ ์ ์ ์๋ค.
์์ ์์ ์์ ๋ค๋ค๋, ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ฉ ๋๋ ๊ฐ๋ฉฐ ์ฐพ๋ ๋ฐฉ๋ฒ์ ์ด์ง ํ์(Binary Search)์ด๋ผ๊ณ ํ๊ณ , ์ด๋ฌํ ๋ฐฉ์์ ์ ์ฉํ์ฌ ์ ๋ ฌ ์ํจ ํธ๋ฆฌ๋ฅผ Binary Searchํธ๋ฆฌ๋ผ๊ณ ํ๋ค.
์ฌ๊ธฐ์ ๋ ธ๋๋ง๋ค ๋ฐ์ดํฐ๋ฅผ ํ๋๊ฐ ์๋๋ผ 2~3๊ฐ์ฉ ๋ฃ์ด์ฃผ๋ฉด ์ข ๋ ์ฑ๋ฅ์ ๊ฐ์ ์ํฌ ์ ์๋ค. ์ด๋ฅผ 2-3Tree ๋ผ๊ณ ํ๋ค. (ํน์ ์ฐจ์๊ฐ 3์ธ B-ํธ๋ฆฌ)
์ด๋ ๊ฒ ๊ตฌํํ๋ฉด ๋ฐ์ฉ ์๋ฅด๋๊ฒ ์๋๋ผ 1/3, 2/3์ฉ ๊ณผ๊ฐํ๊ฒ ์๋ฅด๋ฉด์ ๋ ๋น ๋ฅด๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์๋๊ฐ ์ ์๋ค.
์ฌ๊ธฐ์ ์ข ๋ ๊ฐ์ ์ํจ ๊ตฌ์กฐ๊ฐ B+ tree์ธ๋ฐ, ํธ๋ฆฌ์ ๋งจ ๋ฐ์์๋ง ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ , ๊ทธ ์์ ๋ถ๋ชจ ๋ ธ๋๋ค์ ๊ฐ์ด๋๋ผ์ธ๋ง ์ ๊ณต์ ํ๋ ๋ฐฉ์์ด๋ค. ๋ฐ์ ์๋ ๋ฐ์ดํฐ ๋ผ๋ฆฌ๋ ๋ฆฌ์คํธ๋ก ์ฐ๊ฒฐ๋์ด ํ์ดํ๋ก ์ด์ด์ ธ์๋ค.
์ด๋ ๊ฒ ๋๋ฉด ๋ฒ์ ๊ฒ์์ด ๋งค์ฐ ์ฌ์์ง๋ค๋ ์ฅ์ ์ด ์๋ค. ์ ์์์์ 4~8๊น์ง ๋ฒ์์ ํด๋นํ๋ ๊ฐ์ ์ฐพ๊ณ ์ ํ๋ค๋ฉด, B-tree์ ๊ฒฝ์ฐ ๋ถํ ๋ ๊ฒฝ๋ก๋ฅผ ๋ฐ๋ผ ์ผ์ผํ ๋ฐ๋ผ๊ฐ๋ฉด์ ๋ฐ์ดํฐ๋ฅผ ์์นํด์ผํ๋ค. (4->6->5->6->7->6->8)
ํ์ง๋ง B+ํธ๋ฆฌ๋ก ์ ์ฅ๋ ๊ฒฝ์ฐ ๊ทธ๋ฅ 4๋ถํฐ ์ฐพ์๋ค์ 8๊น์ง ์ญ์ฑ ์ด๋ํ๋ฉด ๋๋ค. ์ด์ฒ๋ผ ๋ฒ์๊ฒ์์ด ๋งค์ฐ ์ฌ์์ง๊ณ ์์นญ์ด ๋งค์ฐ ๋นจ๋ผ์ง๊ฒ ๋์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ข ๋ฅ๋ง๋ค ์ฐจ์ด๋ ์์ง๋ง ๋๋ถ๋ถ ์ด๋ฌํ ๊ตฌ์กฐ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ธ๋ฑ์ค ๊ธฐ๋ฅ์ ๊ตฌํํด๋์๋ค.
ํธ๋ฆฌ ๋ฐ B+ํธ๋ฆฌ์ ์ข ๋ ์์ธํ ๊ตฌ์กฐ๋ ์๋ ํฌ์คํ ์์ ๋ค๋ฃฌ๋ค.
Hash Function
์์์ ๋ค๋ฃจ์๋ ํธ๋ฆฌ ๊ตฌ์กฐ๊ฐ ๋๋ถ๋ถ ์ฌ์ฉ๋์ง๋ง ๊ฐํน HASH ๊ตฌ์กฐ๋ฅผ ํจ๊ป ์ ์ฉํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์กด์ฌํ๋ค.
Hash ๊ตฌ์กฐ๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์ธ๋ฑ์ค๋ฅผ ๊ตฌํํ๊ฑฐ๋ ๋ฐ์ดํฐ์ ๋น ๋ฅธ ๊ฒ์์ ๊ฐ๋ฅํ๊ฒ ํ๋ ํต์ฌ์ ์ธ ์์ ์ค ํ๋์ด๋ค. ๊ธฐ์กด B+ ํธ๋ฆฌ ๊ฐ์ ๊ตฌ์กฐ์๋ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ์ฌ ๋น ๋ฅธ ๋ฐ์ดํฐ ์ ๊ทผ์ ์ ๊ณตํ๋ค. ์ด๋ก ์ O(1) ๊ฐ๋ฅ
Hash Function ์ ํค(key)๋ฅผ ์ ์(Integer)๋ก ๋งคํ(mapping)ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ์ ์ฅํ๊ฑฐ๋ ๊ฒ์ํ๋๋ฐ ์ฌ์ฉ๋๋ค.
Hash Table์ ๊ตฌ์ฑ ์์๋ ๋ค์๊ณผ ๊ฐ๋ค.
- Hash Function (h):
- ํค ๊ฐ์ ์ผ์ ๋ฒ์ [0, N-1]์ ์ ์๋ก ๋ณํ
- ์: h(x) = x mod N (์ ์ ํค์ ๋ํ ํด์ ํจ์).
- ์ฌ๊ธฐ์ h(x)๋ ํด์ ๊ฐ์ด๋ผ ๋ถ๋ฆผ
- Array of Size N:
- ํด์ ๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฐฐ์ด
- ๊ฐ ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ ํด์ ํจ์์ ์ถ๋ ฅ๊ฐ์ ํด๋น
- ์ ์ฅ ๋ชฉํ:
- (k, o) ๋ฐ์ดํฐ๋ฅผ ์ธ๋ฑ์ค i = h(k)์ ์ ์ฅํ์ฌ ํจ์จ์ ์ธ ๊ฒ์ ๋ฐ ์ ์ฅ์ ๊ตฌํ
- ์์ :
- SSN(์ฃผ๋ฏผ๋ฑ๋ก๋ฒํธ)์ ์ด๋ฆ์ผ๋ก ๊ตฌ์ฑ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ.
- SSN์ 9์๋ฆฌ์ ์์๋ก ๊ฐ์ .
- ํด์ ํ ์ด๋ธ ํฌ๊ธฐ: N = 10,000.
- ํด์ ํจ์: h(x) = x์ ๋ง์ง๋ง ๋ค ์๋ฆฌ ๋ผ๊ณ ํ ๋
- ๊ตฌํ:
- ์๋ฅผ ๋ค์ด, SSN์ด 200-751-9998์ด๋ผ๋ฉด, ํด์ ๊ฐ h(9998)์ ํตํด 9998๋ฒ ์ธ๋ฑ์ค์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ.
์ด์์ ์ธ ํด์ ํจ์
- ์ฝ๊ณ ๋น ๋ฅด๊ฒ ๊ณ์ฐ๋๋ฉฐ, ์ถฉ๋์ด ๊ฑฐ์ ์๋ ํด์ ํจ์๋ฅผ ์ด์์ ์ธ ํด์ ํจ์๋ผ ์ ์ํ๋ค.
- ํด์ ํจ์๋ ๋ ๋จ๊ณ์ ํจ์ ์กฐํฉ์ผ๋ก ๊ตฌํ๋๋ค.
- Hash Code Map (hโ): ํค(key)๋ฅผ ์ ์(integer)๋ก ๋ณํ.
- Compression Map (hโ): ์ ์๋ฅผ ํด์ ํ ์ด๋ธ์ ์ธ๋ฑ์ค ๋ฒ์(0 ~ N-1)๋ก ๋ณํ.
- h(x) = hโ(hโ(x))
ํด์ํจ์์ ๋ชฉ์ ์ ๋ฐ์ดํฐ๋ฅผ ๋ฌด์์์ ์ผ๋ก ๋ถ์ฐ ์์ผ ์ถฉ๋์ ์ต์ํํ๊ณ ๊ฒ์ ํจ์จ์ ๊ทน๋ํ ์ํค๋๊ฒ
์ด์์ ์ธ ์กฐ๊ฑด์ ๋ง์กฑํ๋ฉด ๋งค์ฐ ๋น ๋ฅธ ์ฑ๋ฅ์ ๋ณด์ฌ์ฃผ์ง๋ง, exact match๋ง ํด๋น๋๊ณ , range query๋ ๋ถ๊ฐ๋ฅํ๋ค.
๊ทธ๋์ exact match์๋ง HASH๋ฅผ ์ฌ์ฉํ๊ณ , range ๊ฒ์์๋ BTREE๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์์ผ๋ก ๋๊ฐ์ง ๊ตฌ์กฐ๋ฅผ ๋ชจ๋ ์ฑํํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค
Collision Handling (์ถฉ๋ ์ฒ๋ฆฌ)
- Chaining:
- ๊ฐ ์ ์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ๋์ด ์ถฉ๋ ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ.
- ๊ตฌํ์ด ๋จ์ํ์ง๋ง, ์ถ๊ฐ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์.
- Open Addressing:
- ์ถฉ๋ ๋ฐ์ ์ ํ ์ด๋ธ ๋ด ๋ค๋ฅธ ๋น ์ ์ ์ฐพ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ.
- ์ถฉ๋์ ํด๊ฒฐํ๊ธฐ ์ํ ํจ์จ์ ์ธ ๊ณต๊ฐ ํ์ฉ.
MySQL์์ Create Index
์ข์ธก์ ์ฝ๋๋ Create Index๋ฅผ ์ฌ์ฉํ๋ ๊ตฌ๋ฌธ์ ๋ณด์ฌ์ค๋ค.
UNIQUE๋ ์ค๋ณต์ ํ์ฉํ์ง ์๋ ์ธ๋ฑ์ค, FULLTEXT๋ ํ ์คํธ ๊ฒ์์ฉ ์ธ๋ฑ์ค, SPATIAL์ ๊ณต๊ฐ(์ง๋ฆฌ ์ ๋ณด) ๋ฐ์ดํฐ๋ฅผ ์ํ ์ธ๋ฑ์ค์ด๋ค. [index_type]์๋ BTREE ํน์ HASH๋ฅผ ์ง์ ํด์ค๋ค.
์ถ๊ฐ ์ต์ ์ผ๋ก KEY_BLOCK_SIZE๋ ํค ๋ธ๋ก ํฌ๊ธฐ๋ฅผ ์ง์ ํ๋ ์ต์ , VISBLE ๋๋ INVISBLE์ ์ธ๋ฑ์ค๋ฅผ ์ฟผ๋ฆฌ์์ ๋ณด์ด๊ฒ ํ๋ ์ค์ ๊ณผ ์จ๊ธฐ๋ ์ค์ ์ด๋ค.
[algorithm_option] ์ ์ธ๋ฑ์ค ์์ฑ ๋ฐฉ์์ ์ง์ ํ๋ฉฐ DEFAULT, INPLACE, COPY์ค ์ ํ์ด ๊ฐ๋ฅํ๋ค
[lock_option]์ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๊ฑฐ๋ ๋ณ๊ฒฝํ๋ ๋์ ํ ์ด๋ธ์ ์ ๊ธ(lock)๋ฐฉ์์ ์ค์ ํ๋ค.
์ฐ์ธก์์๋ ์์๋ฅผ ๋ณด์ฌ์ค๋ค.
- ๊ธฐ๋ณธ ์ธ๋ฑ์ค ์์ฑ : CREATE INDEX idx1 ON t1 (col1 + col2);
- ๋ณตํฉ ์ธ๋ฑ์ค ์์ฑ: CREATE INDEX idx2 ON t1 ((col1 + col2), (col1 - col2), col1);
- ALTER TABLE๋ก ์ธ๋ฑ์ค ์ถ๊ฐ: ALTER TABLE t1 ADD INDEX ((col1 * 40) DESC);
- ํน์ ์์ง์์ ์ธ๋ฑ์ค ํ์
์ง์ ํ์ฌ ์์ฑ
- CREATE TABLE lookup (id INT) ENGINE = MEMORY;
CREATE INDEX id_index ON lookup (id) USING BTREE;
- CREATE TABLE lookup (id INT) ENGINE = MEMORY;
ํ๋จ์ ํ์์๋ ์คํ ๋ฆฌ์ง ์์ง์ด ์ง์ํ๋ ์ธ๋ฑ์ค ํ์ ์ ์ค๋ช ํ๋ค.
- InnoDB, MyISAM: BTREE ์ธ๋ฑ์ค๋ง ์ง์
- MEMORY/HEAP, NDB: HASH์ BTREE ๋ชจ๋ ์ง์(exact๋ hash, range๋ btree)
์์๋ฅผ ๋ณด๋ฉด, ์ค์ ๋ก ์์ฑ๋ t1 ํ ์ด๋ธ์ ๋ํด, DESC, EXLAIN์ ํตํด ํ ์ด๋ธ ์ ๋ณด์ ์คํ ๊ณํ์ ํ์ธํ๋ค.
possible_keys์ key๊ฐ์ด null๋ก ๋ํ๋๋ค. ์ธ๋ฑ์ค๊ฐ์ด ์์ด ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๊ณ ์๋ ์ํ์์ ์ ์ ์๋ค.(rows=3์ผ๋ก ๋ณด์ ๋ฐ์ดํฐ 3๊ฐ)
create index๋ก ์ธ๋ฑ์ค index_t1์ ์์ฑํด์ฃผ๊ณ ๋์ desc t1;์ ํ๋ฉด key์ด์ MUL(Multiple Occurrences)์ด ์ถ๊ฐ๋๊ณ , ํด๋น ์ด์ ์ธ๋ฑ์ค๊ฐ ์ ์ฉ๋์์์ ํ์ธํ ์ ์๋ค.
explain ๊ฒฐ๊ณผ์์๋ where์ ์์ด ์ฉ์ผ๋ก select * from t1์ ํ๋ฉด ๋ค๋ฅธ๊ฒ ์์ง๋ง
where์ ์ ์ฌ์ฉํด์ a๊ฐ์ ์กฐ๊ฑด์ผ๋ก ์กฐํํ๋ ๊ฒฝ์ฐ, ์ธ๋ฑ์ค๋ฅผ ํ์ฉํ ๊ฒ์์ด ์ด๋ฃจ์ด์ง๊ณ ์์์ ํ์ธํ ์ ์๋ค.
type์ ref๊ฐ ๋์๊ณ possible_keys์ ์ธ๋ฑ์ค ์ด๋ฆ index_t1์ด ํ์๋๋ฉฐ, key๊ฐ๋ index_t1์ผ๋ก ์ค์ ๋๋ค. rowsํ๋ ๊ฐ๋ 3์์ 1๋ก ๊ฐ์ํ๋ค. ๋ถํ์ํ ๋ฐ์ดํฐ์ ์ ๊ทผ์ด ์ค์ด๋ค์ด ์ฑ๋ฅ์ด ํฅ์๋์์์ ์ ์ ์๋ค.
๋ํ, ์ธ๋ฑ์ค๋ฅผ ์ค์ ํ๋ค ํ๋๋ผ๋ ๋ชจ๋ ์ฟผ๋ฆฌ์ ์ฑ๋ฅ์ด ์ข์์ง๋ ๊ฒ์ด ์๋๋ผ ์กฐ๊ฑด์ ๋ง๋ ์ธ๋ฑ์ค๋ง ์ฟผ๋ฆฌ ์ฑ๋ฅ์ ํฅ์ ์ํจ๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
๋ค์ ๋ด์ฉ์์ ์ธ๋ฑ์ค์ ํจ์จ์ฑ์ ๋ํด ๋ค๋ฃจ๊ฒ ์ง๋ง, ํ ์ด๋ธ์ ์ธ๋ฑ์ค๊ฐ ๋ง๋ค๊ณ ๋ฌด์กฐ๊ฑด ์ข์ ๊ฒ์ ์๋๊ธฐ์, ํ์ํ ์ฟผ๋ฆฌ์ ๋ง๊ฒ ์ ์คํ ์ธ๋ฑ์ค๋ฅผ ์ค์ ํ ํ์๊ฐ ์๋ค.
EXPLAIN : MySQL์์ ์ฟผ๋ฆฌ ์คํ๊ณํ์ ํ์ธํ๋๋ฐ ์ฌ์ฉ๋๋ ๋๊ตฌ๋ก, ์ฟผ๋ฆฌ๊ฐ ์คํ๋ ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ด๋ค ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๋์ง์ ๋ํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ค. ์ด๋ฅผ ํตํด ์ต์ ํ์ ์ฑ๋ฅ ๊ฐ์ ์ ๋จ์๋ฅผ ์ป์ ์ ์๋ค.
DESC: ํ ์ด๋ธ ๊ตฌ์กฐ๋ฅผ ํ์ดํ๋๋ฐ ์ฐ์ด๋ฉฐ, ํ ์ด๋ธ์ ์ด๋ค ์ด์ด ์๋์ง, ์ธ๋ฑ์ค๊ฐ ์ค์ ๋์๋์ง ๋ฑ์ ํ์ธํ ์ ์๋ค. ํ ์ด๋ธ์ ์คํค๋ง๋ฅผ ์ดํดํ๋๋ฐ ์ฌ์ฉ๋๋ค.
์ ๋ฆฌํ์๋ฉด ์ธ๋ฑ์ค ํ์ ์ ๋ฐ๋ผ, exact, range ์ฟผ๋ฆฌ๋ ์๋์ ๊ฐ์ ์ฑ๋ฅ์ ๋ณด์ธ๋ค.
- USING BTREE(B+ Tree) : range query -> O(log n)
- USIGN HASH(extendible hash) : exact match query -> O(n)~O(1)
์ธ๋ฑ์ค ๊ฐ์ด๋๋ผ์ธ
์ ๋ฆฌํ๋๋ก, ์ธ๋ฑ์ค๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฑ๋ฅ ์ต์ ํ์ ํต์ฌ ๋๊ตฌ์ด๋ค. ํ์ง๋ง ๋ชจ๋ ๊ฒฝ์ฐ์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ํจ์จ์ ์ธ ๊ฒ์ ์๋๋ค.
์๋๋ ์ธ๋ฑ์ค ์ค๊ณ์ ์ฌ์ฉ ์ ํญ๋ชฉ๋ณ ์ฐธ๊ณ ํ ๊ฐ์ด๋๋ผ์ธ์ด๋ค.
1๏ธโฃ ํค์ ์ธ๋ฑ์ค
- Primary Key: ๊ธฐ๋ณธ์ ์ผ๋ก ์ธ๋ฑ์ค๊ฐ ์๋ ์์ฑ๋๋ค. (ํ ์ด๋ธ์์ ์ ์ผ์ฑ์ ๋ณด์ฅํ๋ Column)
- Foreign Key: ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ํ ์ด๋ธ ๊ฐ ๊ด๊ณ๋ฅผ ์ ์. ์ธ๋ ํค์ ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํ๋ฉด ์กฐ์ธ ์ฑ๋ฅ์ด ํฅ์๋ ์ ์์
- Alternate Key: Priamry key ์ธ์ ์ถ๊ฐ์ ์ผ๋ก ์ ์ผ์ฑ์ ๋ณด์ฅํด์ผ ํ๋ ๊ฒฝ์ฐ ์ฌ์ฉ
์์ ๊ฐ์ key๋ค์ ๊ฒฐ์ ์๋ก์, ๋ค๋ฅธ ์ปฌ๋ผ๋ค์ ์ด๋ฌํ key์ ์ข ์์ ์ด๊ธฐ ๋๋ฌธ์, key์ ์ฐ์ ์ ์ผ๋ก ์ธ๋ฑ์ค๋ฅผ ์ ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
2๏ธโฃ ์ธ๋ฑ์ค ํจ์จ์ฑ
์ธ๋ฑ์ค๋ก ์ด๋ค ์ปฌ๋ผ์ ์ ์ ํ ์ง ๊ณ ๋ฏผ๋ ๋, ํจ์จ์ฑ์ ๋ฐ์ง ์ ์๋ ์งํ๊ฐ ์๋ค.
- Selectivity:
- ์ ์ฒด ๋ ์ฝ๋ ์ค์์ ์กฐ๊ฑด์ ์ ์ํด ์ ํ๋๋ ๋ ์ฝ๋ ๋น์จ
- ์ ํ๋ = 1 / NDV (where = ์กฐ๊ฑด) *NDV (Number of Distinct Value) = ์ ์ผํ๊ฒ ๊ตฌ๋ณ๋๋ ์ปฌ๋ผ ๊ฐ ์ข ๋ฅ์ ๊ฐ์
- ์ ํ๋๊ฐ ๋ฎ์ ์๋ก ์ธ๋ฑ์ค ํ๋ณด๊ฐ ๋๊ธฐ ์ข๋ค (์ผ๋ฐ์ ์ผ๋ก 0~4%์ ์ ํ์ฑ์ ๊ฐ์ง ์ธ๋ฑ์ค๊ฐ ํจ์จ์ .)
- Cardinality:
- ์ ์ฒด ๋ ์ฝ๋ ์ค์์ ์กฐ๊ฑด์ ์ ์ํด ์ ํ๋๋ ๋ ์ฝ๋ ๊ฐ์ (์ค์ predicate์ ์ํด์ ์ถ์ถ๋๋ row ์๋ฅผ ์๋ฏธ)
- ์ปฌ๋ผ ๊ฐ์ ๊ณ ์ ๋. ๊ฐ์ด ๋ค์ํ ์๋ก ์ธ๋ฑ์ค์ ํจ์จ์ฑ์ด ๋์์ง.
- ์ ํ๋์ ์ด ๋ ์ฝ๋ ์๋ฅผ ๊ณฑํด์ ๊ตฌํ๋ค.
3๏ธโฃ ๋์ ํ ์ด๋ธ๊ณผ ์ธ๋ฑ์ค
Dynamic ํ ์ด๋ธ์๋ ์ธ๋ฑ์ค๊ฐ ๋ถํ์
-> ๋ฐ์ดํฐ์ ์ฝ์ (insert) ๋ฐ ์ญ์ (delete)๊ฐ ๋น๋ฒํ ํ ์ด๋ธ์์๋ ์ ์ง ๋น์ฉ์ด ๋์์ ธ ๋นํจ์จ์ .
4๏ธโฃ ์ธ๋ฑ์ค ๊ฐ์
ํ ์ด๋ธ๋น 3~4๊ฐ ์ดํ๋ก ์ ํํ๋ ๊ฒ์ด ์ข๋ค. ๋๋ฌด ๋ง์ ์ธ๋ฑ์ค๋ ๋ฐ์ดํฐ ๋ณ๊ฒฝ ์ ์ฑ๋ฅ์ ์ ํ์ํฌ ์ ์๋ค.(์ธ๋ฑ์ค์๋ ๋ฐ์์ ํด์ค์ผ ํ๋ฏ๋ก)
5๏ธโฃ ๋ฐ์ดํฐ ํ์ ๊ณผ ์ธ๋ฑ์ค
VARCHAR ๋์ ์ ์(Integer)๋ CHAR ๊ฐ์ด ๊ณ ์ ๊ธธ์ด ํ์ ์ ์ฌ์ฉํ๋ ๊ฒ์ด ํจ์จ์ ์ด๋ค.
VARCHAR๋ ๊ธธ์ด๊ฐ ๊ฐ๋ณ์ ์ด์ด์ ๋น๊ต์ ์ ์ฅ ์ ์ถ๊ฐ ๋น์ฉ์ด ๋ฐ์ํ๋ค.
6๏ธโฃ ํ ์ด๋ธ ํฌ๊ธฐ์ ์ธ๋ฑ์ค
์์ ํ ์ด๋ธ์ ์ธ๋ฑ์ค๊ฐ ํ์ํ์ง ์์ ์ ์๋ค. ํ ์ด๋ธ ํฌ๊ธฐ๊ฐ ์์ผ๋ฉด ํ ํ ์ด๋ธ ์ค์บ์ด ๋ ๋น ๋ฅผ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ฒ์ ์์์์ ์ธ๋ฑ์ค๋ฅผ ๋์ ํ๊ณ ์ ํ๋ ๊ฒฝ์ฐ๋ฅผ 100๋ง๊ฐ์ ๋ฐ์ดํฐ๊ฐ ์๋ ๊ฒฝ์ฐ๋ก ์ค์ ํ ๊ฒ ์ฒ๋ผ, ํ ์ด๋ธ์ ํฌํ์ด ๋ง์ ์ ์ฒด ์ค์บ์ด ๋ถ๋ด์ค๋ฌ์ด ์ํฉ์์ ์ธ๋ฑ์ค๋ฅผ ์ ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
7๏ธโฃ ์ธ๋ฑ์ค ๋์ ์์
ํฐ ํ ์ด๋ธ์ ์ธ๋ฑ์ค๋ฅผ ์ ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ, ์ธ๋ฑ์ค๋ ์ฒ์๋ถํฐ ์ค์ ํ๋ฉด ์๋๋ค. ์ธ๋ฑ์ค๋ฅผ ์ค์ ํ๊ณ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๊ฒ ๋๋ฉด ์๊ฐ์ด ์ค๋๊ฑธ๋ฆฌ๊ฒ ๋๋ค.(๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ ๋๋ง๋ค, ์ธ๋ฑ์ค์๋ ๊ฐ์ด ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ด์ค์ผ ํ๊ธฐ ๋๋ฌธ์)
๊ฐ๋ฅํ๋ฉด ํ์ํ ๋ฐ์ดํฐ๋ค Insert๋ฅผ ๋จผ์ ํ๊ณ , ์ธ๋ฑ์ค๋ฅผ ๊ฑธ์ด์ฃผ๋ ๊ฒ์ด ์ข๋ค.
8๏ธโฃ ์ ๋ ฌ ์์ ๊ณผ ์ธ๋ฑ์ค
ORDER BY์ GROUP BY ๊ฐ์ ์์ ์ด ๋น๋ฒํ ๊ฒฝ์ฐ์๋ ์ธ๋ฑ์ค๋ฅผ ํ์ฉํ๋ฉด ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์๋ค.
9๏ธโฃ WEHERE ์กฐ๊ฑด๊ณผ ์ธ๋ฑ์ค
์ธ๋ฑ์ค๋ ์๋ ์กฐ๊ฑด์์ ํนํ ํจ๊ณผ์ ์ด๋ค.
- WHERE id = ํน์ ๊ฐ ์ ํ๋ ๊ฒฝ์ฐ
- LIKE ์กฐ๊ฑด ( ex: LIKE 'abc%')
- ๋ฒ์ ์กฐ๊ฑด (ex: id BETWEEN 2 AND 8).
๋ฐ๋๋ก ์ ์ฒด ๊ฒ์์ ํ๋ ๊ฒฝ์ฐ(ex: WHERE created_at IS NOT NULL)์๋ ์ธ๋ฑ์ค๊ฐ ํ์ฉ๋ ์ผ์ด ๋ง์ง ์์์ ๋นํจ์จ์ ์ด๋ค.
'Database > ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด๋ก ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[DB] ๐ Big Data ๊ธฐ์ (feat. MapReduce, Hadoop) (3) | 2024.12.07 |
---|---|
[DB] ๐ NoSQL์ ํน์ง๊ณผ ์ข ๋ฅ (0) | 2024.12.07 |
[DB] ๐ ๋์์ฑ ์ ์ด(Concurrency Control) with MySQL (1) | 2024.12.06 |
[DB] ๐ ํธ๋์ญ์ (Transaction), ํ๋ณต(Recovery) with MySQL (0) | 2024.12.02 |
[DB] ๐ ํจ์์ ์ข ์์ฑ(Funtional Dependency)๊ณผ ์ ๊ทํ(Normalization) (0) | 2024.11.30 |