1. ์ธ๋ฑ์ค๋?
์ธ๋ฑ์ค๋ ์ถ๊ฐ์ ์ธ ์ฐ๊ธฐ ์์ ๊ณผ ์ ์ฅ ๊ณต๊ฐ์ ํ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ๊ฒ์ ์๋๋ฅผ ํฅ์์ํค๊ธฐ ์ํ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
๋ง์ฝ ์ฐ๋ฆฌ๊ฐ ์ฑ ์์ ์ํ๋ ๋ด์ฉ์ ์ฐพ๋๋ค๊ณ ํ๋ฉด, ์ฑ ์ ๋ชจ๋ ํ์ด์ง๋ฅผ ์ฐพ์ ๋ณด๋๊ฒ์ ์ค๋ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ฑ ์ ์ ์๋ค์ ์ฑ ์ ๋งจ ์ ๋๋ ๋งจ ๋ค์ ์์ธ์ ์ถ๊ฐํ๋๋ฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ index๋ ์ฑ ์ ์์ธ๊ณผ ๊ฐ๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์์๋ ํ ์ด๋ธ์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๋ฉด ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ์ ๋ฐ์ดํฐ์ ์์น๋ฅผ ํฌํจํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์์ฑํ์ฌ ๋น ๋ฅด๊ฒ ์กฐํํ ์ ์๋๋ก ๋๊ณ ์๋ค.
์ฅ์
1. ๊ฒ์ ๋์ ๋ ์ฝ๋์ ๋ฒ์๋ฅผ ์ค์ฌ ๊ฒ์ ์๋๋ฅผ ๋น ๋ฅด๊ฒ ํ ์ ์๋ค.
2. ์ค๋ณต ๋ฐ์ดํฐ๋ฅผ ๋ฐฉ์งํ๊ฑฐ๋ ํน์ ์ปฌ๋ผ์ ์ ์ผ์ฑ(Unique)์ ๋ณด์ฅํ ์ ์๋ค.
3. ORDER BY ์ ๊ณผ GROUP BY ์ , WHERE ์ ๋ฑ์ด ์ฌ์ฉ๋๋ ์์ ์ด ๋์ฑ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌ๋๋ค.
๋จ์
1. ์ธ๋ฑ์ค ์์ฑ์ ๋ฐ๋ฅธ ์ถ๊ฐ์ ์ธ ์ ์ฅ ๊ณต๊ฐ์ด ํ์ํ๋ค. (์ธ๋ฑ์ค ์ฌ์ฉ ์ ํด๋น ์ ๋ณด๋ฅผ ๋ด์ MYI ํ์ผ ์์ฑ)
2. CREATE(์ฝ์ ), DELETE(์ญ์ ), UPDATE(์์ ) ์์ ์์๋ ์ธ๋ฑ์ค๋ฅผ ์ ๋ฐ์ดํธํด์ผ ํ๋ฏ๋ก ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํ ์ ์๋ค.
3. ํ ํ์ด์ง๋ฅผ ๋์์ ์์ ํ ์ ์๋ ๋ณํ์ฑ์ด ์ค์ด๋ ๋ค.
4. ์ธ๋ฑ์ค ์์ฑ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆด ์ ์๋ค.
์ธ๋ฑ์ค๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๊ฒ์ ๋ฐ ์ฒ๋ฆฌํ๋ ์๋๋ฅผ ํฅ์์ํค๋ ๋ฐ ์ค์ํ ์ญํ ์ ํ๋ค.
ํ์ง๋ง, ์ธ๋ฑ์ค๋ฅผ ์ ์ ํ๊ฒ ํ์ฉํ์ง ์์ผ๋ฉด ์คํ๋ ค ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฑ๋ฅ์ด ์ ํ๋๊ฑฐ๋ ์ ์ฅ ๊ณต๊ฐ์ด ๋ญ๋น๋ ์ ์๋ค.
๋ฐ๋ผ์, ์ํฉ์ ๋ง๊ฒ ์ธ๋ฑ์ค๋ฅผ ์ ์ ํ ์ ํํ๊ณ ์์ฑํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ค์ํ๋ค.
2. ์ธ๋ฑ์ค์ ์๋ฃ๊ตฌ์กฐ
์ธ๋ฑ์ค๋ฅผ ๊ตฌํํ๊ธฐ ์ํด์๋ ๋ค์ํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ ์ ์๋๋ฐ, ๊ฐ์ฅ ๋ํ์ ์ธ ํด์ ํ ์ด๋ธ๊ณผ B+Tree์ ๋ํด์ ์์๋ณด์.
- ํด์ ํ ์ด๋ธ(Hash Table)
ํด์ ํ ์ด๋ธ์ (Key, Value)๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ ์ค ํ๋๋ก ๋น ๋ฅธ ๋ฐ์ดํฐ ๊ฒ์์ด ํ์ํ ๋ ์ ์ฉํ๋ค. ํด์ ํ ์ด๋ธ์ Key๊ฐ์ ์ด์ฉํด ๊ณ ์ ํ index๋ฅผ ์์ฑํ์ฌ ๊ทธ index์ ์ ์ฅ๋ ๊ฐ์ ๊บผ๋ด์ค๋ ๊ตฌ์กฐ์ด๋ค.
ํด์ ํ ์ด๋ธ ๊ธฐ๋ฐ์ DB ์ธ๋ฑ์ค๋ (๋ฐ์ดํฐ=์ปฌ๋ผ์ ๊ฐ, ๋ฐ์ดํฐ์ ์์น)๋ฅผ (Key, Value)๋ก ์ฌ์ฉํ์ฌ ์ปฌ๋ผ์ ๊ฐ์ผ๋ก ์์ฑ๋ ํด์๋ฅผ ํตํด ์ธ๋ฑ์ค๋ฅผ ๊ตฌํํ์๋ค. ํด์ ํ ์ด๋ธ์ ์๊ฐ๋ณต์ก๋๋ O(1)์ด๋ฉฐ ๋งค์ฐ ๋น ๋ฅธ ๊ฒ์์ ์ง์ํ๋ค.
ํ์ง๋ง DB ์ธ๋ฑ์ค์์ ํด์ ํ ์ด๋ธ์ด ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ๋ ์ ํ์ ์ธ๋ฐ, ๊ทธ๋ฌํ ์ด์ ๋ ํด์๊ฐ ๋ฑํธ(=) ์ฐ์ฐ์๋ง ํนํ๋์๊ธฐ ๋๋ฌธ์ด๋ค. ํด์ ํจ์๋ ๊ฐ์ด 1์ด๋ผ๋ ๋ฌ๋ผ์ง๋ฉด ์์ ํ ๋ค๋ฅธ ํด์ ๊ฐ์ ์์ฑํ๋๋ฐ, ์ด๋ฌํ ํน์ฑ์ ์ํด ๋ถ๋ฑํธ ์ฐ์ฐ(>, <)์ด ์์ฃผ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฒ์์ ์ํด์๋ ํด์ ํ ์ด๋ธ์ด ์ ํฉํ์ง ์๋ค.
- B+ Tree
B+Tree๋ DB์ ์ธ๋ฑ์ค๋ฅผ ์ํด ์์ ๋ ธ๋๊ฐ 2๊ฐ ์ด์์ธ B-Tree๋ฅผ ๊ฐ์ ์ํจ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
๊ฐ์ฅ ํ๋จ์ leaf node๋ฅผ ๋ณด๋ฉด ๊ฐ์ ๋ ๋ฒจ์ ๋ ธ๋๋ค๋ผ๋ฆฌ ์๋ก linked list ํ์์ผ๋ก ์ฐ๊ฒฐ๋์ด ์๋ค. ์ํ์ ์ก์ธ์ค๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํด key : value์ ํ์ด์ง๋ leaf node์๋ง ์กด์ฌํ๊ณ , ๊ทธ ์ธ ๋ ๋ฒจ์ node๋ค์ ์ค์ง ์ธ๋ฑ์ฑ์ ์ํ key๋ฅผ ์ ์ฅํ๋ ์ฉ๋๋ก๋ง ์ฌ์ฉ๋๋ค.
ํน์ง
- ๋ฆฌํ๋ ธ๋(๋ฐ์ดํฐ๋ ธ๋)๋ง ์ธ๋ฑ์ค์ ํจ๊ป ๋ฐ์ดํฐ(Value)๋ฅผ ๊ฐ์ง๊ณ ์๊ณ , ๋๋จธ์ง ๋ ธ๋(์ธ๋ฑ์ค๋ ธ๋)๋ค์ ๋ฐ์ดํฐ๋ฅผ ์ํ ์ธ๋ฑ์ค(Key)๋ง์ ๊ฐ๋๋ค.
- ๋ฆฌํ๋ ธ๋๋ค์ LinkedList๋ก ์ฐ๊ฒฐ๋์ด ์๋ค.
- ๋ฐ์ดํฐ ๋ ธ๋ ํฌ๊ธฐ๋ ์ธ๋ฑ์ค ๋ ธ๋์ ํฌ๊ธฐ์ ๊ฐ์ง ์์๋ ๋๋ค.
3. ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค vs ๋ ผ-ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค
ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค์ ๋ ผ-ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค๋ ์๋ ์ฌ์ง๊ณผ ๊ฐ์ด ์์๋ฅผ ๋ค ์ ์๋ค.
์ฐ๋ฆฌ๋ ๋ฐ๋ก ์ธ๋ฑ์ค๋ฅผ ๊ฑธ์ง ์์๋ ์์ฐ์ค๋ฝ๊ฒ index๋ฅผ ์ฌ์ฉํ๊ณ ์์๋ค.
CREATE TABLE member (
id int --> primary key
name varchar(255),
email varchar(255) --> unique
);
์์ ๊ฐ์ ํ ์ด๋ธ์ด ์์ ๋ ์ธ๋ฑ์ค๋ ๋ช ๊ฐ ์ผ๊น?? ์ด 2๊ฐ์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค. primary key ๊ฐ ์ ์ฉ๋ id๋ ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค, unique key ๊ฐ ์ ์ฉ๋ email ์ ๋ ผ-ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค๊ฐ ์ น์ฉ๋์ด์๋ค.
- ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค
์์์ ๋ง๋ table์ ์ด๋ ํ ์ ์ฝ์กฐ๊ฑด์ ๊ฑธ์ง ์๊ณ ์์ฐจ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฃ๋๋ค๊ณ ๊ฐ์ ํด๋ณด์.
๋ฐ์ดํฐ๋ฅผ ๋ฃ์ ์์๋๋ก ํ ์ด๋ธ์ ๋ฐ์ดํฐ๊ฐ ์์ผ ๊ฒ์ด๋ค.
์ฌ๊ธฐ์ ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค๋ฅผ ์ ์ฉํด๋ณด์. ์๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ ๋ชจ๋ ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค๋ฅผ ๊ฑธ ์ ์๋ค.
ALTER TABLE member ADD CONSTRAINT pk_id PRIMARY KEY (id);
ALTER TABLE member MODIFY COLUMN id int NOT NULL;
ALTER TABLE member ADD CONSTRAINT nuq_id UNIQUE (id);
- ์ธ๋ฑ์ค ์ ์ฉ ํ
ํน์ง
- ์ค์ ๋ฐ์ดํฐ ์์ฒด๊ฐ ์ ๋ ฌ
- ํ ์ด๋ธ๋น 1๊ฐ๋ง ์กด์ฌ ๊ฐ๋ฅ
- ๋ฆฌํ ํ์ด์ง๊ฐ ๋ฐ์ดํฐ ํ์ด์ง
- ์๋์ ์ ์ฝ์กฐ๊ฑด ์ ์๋ ์์ฑ
- primary key (์ฐ์ ์์)
- unique + not null
- ๋ ผ-ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค
๋ง์ฐฌ๊ฐ์ง๋ก ์ ๋ ฌ๋์ด์์ง ์์ ๋ฐ์ดํฐ์ name์ผ๋ก ๋ ผ-ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค๋ฅผ ๊ฑธ์ด๋ณด์.
์๋ ์ธ ๊ฐ์ง ๋ฐฉ๋ฒ ๋ชจ๋ ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค๋ฅผ ๊ฑธ ์ ์๋ค.
ALTER TABLE member ADD CONSTRAINT unq_name UNIQUE (name);
CREATE UNIQUE INDEX unq_idx_name ON member (name);
CREATE INDEX idx_name ON member (name);
- ์ธ๋ฑ์ค ์ ์ฉ ํ
ํน์ง
- ์ค์ ๋ฐ์ดํฐ ํ์ด์ง๋ ๊ทธ๋๋ก ์กด์ฌ
- ๋ณ๋์ ์ธ๋ฑ์ค ํ์ด์ง ์์ฑ => ์ถ๊ฐ ๊ณต๊ฐ ํ์
- ํ ์ด๋ธ๋น ์ฌ๋ฌ ๊ฐ ์กด์ฌ
- ๋ฆฌํ ํ์ด์ง์ ์ค์ ๋ฐ์ดํฐ ํ์ด์ง ์ฃผ์๋ฅผ ๋ด๊ณ ์์
- ์๋์ ์ ์ฝ์กฐ๊ฑด ์ ์๋ ์์ฑ
- uinique ์ ์ฝ ์กฐ๊ฑด ์ ์ฉ ์ ์๋ ์์ฑ
- ์ง์ index ์์ฑ ์ ๋ ผ-ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค ์์ฑ
4. ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค์ ๋ ผ-ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค๋ฅผ ํจ๊ป ์ ์ฉ
ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค์ ๋ ผ-ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค๋ฅผ ํจ๊ป ์ ์ฉํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น??
id ์ปฌ๋ผ์ ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค + name ์ปฌ๋ผ์ ๋ ผํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค ๋ฅผ ์ ์ฉํ๊ณ ํ ์ด๋ธ ๊ตฌ์กฐ๋ฅผ ์ดํด๋ณด์.
๋ง์ฝ name = '๋ผ๋ผ' ๋ก ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ค๋ฉด ๋ ผ-ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค ํ์ด์ง๋ฅผ ํ๊ณ ๋ผ๋ผ์ index ๊ฐ์ ์ป๊ฒ ๋๋ค. ์ฐพ์ index ๊ฐ์ผ๋ก ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค ํ์ด์ง๋ฅผ ์กฐํํ์ฌ ์ค์ ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ ์๋ค.
์ด์ ๊ณผ ๋ฌ๋ฆฌ ๋ ผ-ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค์ ๋ฆฌํ ํ์ด์ง์์ ์ค์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋ ์ฃผ์๋ฅผ ๊ฐ๋ฅดํค์ง ์๋๋ค.
์ ๊ทธ๋ด๊น??
์ด์ ๋ ์๋ก์ด ๋ฐ์ดํฐ๊ฐ insert ๋ ๋ ์ถ๊ฐ์ ์ธ ์์ ๋ค์ด ๋ง์์ง๊ธฐ ๋๋ฌธ์ด๋ค.
๋ง์ฝ "ํ๋" ์ด๋ผ๋ ์ด๋ฆ์ ๊ฐ์ง ๋ฐ์ดํฐ๊ฐ ์๋ก ์ถ๊ฐ๋๋ค๋ฉด 1000๋ฒ์งธ ์ฃผ์๋ฅผ ๊ฐ์ง ํ์ด์ง์ ๋ฐ์ดํฐ๊ฐ ๋ค์ด๊ฐ๊ฒ ๋ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ฉด ํ์ด์ง ๋ถํ ์ด ๋ฐ์ํ ๊ฒ์ด๊ณ name ์ปฌ๋ผ์ ๋ฆฌํ ํ์ด์ง์ ์ฃผ์๋ ๋ณ๊ฒฝํด์ค์ผ ํ๋ค.
5. ์ธ๋ฑ์ค ์ ์ฉ ๊ธฐ์ค
์ธ๋ฑ์ค๋ฅผ ์ ์ฉํ๋ ๊ธฐ์ค์ ๋ํด ์ดํด๋ณด์.
-์ฌ์ฉํ๋ฉด ์ข์ ๊ฒฝ์ฐ
- ์นด๋๋๋ฆฌํฐ๊ฐ ๋์ (์ค๋ณต๋๊ฐ ๋ฎ์) ์ปฌ๋ผ
- where, join, order by ์ ์ ์์ฃผ ์ฌ์ฉ๋๋ ์ปฌ๋ผ
- insert, update, delete ๊ฐ ์์ฃผ ๋ฐ์ํ์ง ์๋ ์ปฌ๋ผ
- ๊ท๋ชจ๊ฐ ์์ง ์์ ํ ์ด๋ธ
์นด๋๋๋ฆฌํฐ?
์ค๋ณต๋๊ฐ ‘๋ฎ์ผ๋ฉด’ ์นด๋๋๋ฆฌํฐ๊ฐ ‘๋๋ค’๊ณ ํํํ๋ค.
์ค๋ณต๋๊ฐ ‘๋์ผ๋ฉด’ ์นด๋๋๋ฆฌํฐ๊ฐ ‘๋ฎ๋ค’๊ณ ํํํ๋ค.
์นด๋๋๋ฆฌํฐ๋ ์ ์ฒด ํ์ ๋ํ ํน์ ์ปฌ๋ผ์ ์ค๋ณต ์์น๋ฅผ ๋ํ๋ด๋ ์งํ์ด๋ค.
์๋ ํ ์ด๋ธ์ ๊ฐ ์นด๋๋๋ฆฌํฐ๋ฅผ ์ดํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
์ฌ๊ธฐ์๋ ID, ์ด๋ฆ, ์ด๋ฉ์ผ ๋ฑ์ด ์ข์ ์ธ๋ฑ์ค๊ฐ ๋ ์ ์๋ค.
6. ์ธ๋ฑ์ค ์ฑ๋ฅ ๋น๊ต
Index๋ฅผ ํ์ฉํ ์ฑ๋ฅ ๊ฐ์ ํ ์คํธ๋ ๋ค์์ ๊น๊ฒ ๋ค๋ค๋ณผ ์๊ฐ์ด๋ค.
์ฐธ๊ณ
'DB ๐' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[replication] mysql Replication ์ผ๋ก DB ๋ถํ ๋ถ์ฐ ์ํค๊ธฐ (0) | 2024.04.11 |
---|---|
[Neo4j] Graph Database๋? RDBMS์ ๋น๊ต, neo4j ๋์ ์ด์ (1) | 2024.03.27 |
[Redis] redis์์ ๋ฐ์ดํฐ ์๊ตฌ ์ ์ฅํ๋ ๋ฐฉ๋ฒ (RDB / AOF) (0) | 2024.03.09 |
[Lock] DB Lock & JPA Lock ์ฝ๋๋ก ์ดํด๋ณด์ (MySQL) (0) | 2024.02.20 |
[Index] MySQL ์ฑ๋ฅ ์ต์ ํ (+์คํ ๊ณํ) (0) | 2024.02.19 |