๐ ๋น ๋ฅธ ๋ฐ์ดํฐ ๊ฒ์์ ์ํ ์ธ๋ฑ์ค
์ธ๋ฑ์ค๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์์ ๋ฐ์ดํฐ ๊ฒ์์ ๋น ๋ฅด๊ฒ ํ๊ธฐ ์ํ ์๋ฃ๊ตฌ์กฐ์ ๋๋ค.
๋ง์น ์ฑ ์ ์์ธ์ฒ๋ผ, ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ์ฐพ์์ฃผ๋ ์ญํ !
๊ทธ๋ฌ๋ ์ธ๋ฑ์ค๊ฐ ๋ง์์ง๋ฉด INSERT, UPDATE, DELETE ์ ์ค๋ฒํค๋๊ฐ ๋ฐ์ โ ๊ด๋ฆฌ ์ฃผ์ ํ์! ๐จ
๐ ์ธ๋ฑ์ค์ ๊ฐ๋ ๊ณผ ์ข ๋ฅ
์ธ๋ฑ์ค ์ข ๋ฅ | ์ค๋ช | ํน์ง |
---|---|---|
PRIMARY ์ธ๋ฑ์ค | ๊ธฐ๋ณธ ํค(Primary Key)์ ์๋ ์์ฑ๋๋ ์ธ๋ฑ์ค | NULL ํ์ฉ X, ํ ์ด๋ธ ๋ด ์ ์ผ ์๋ณ์, ํด๋ฌ์คํฐ๋ ์ธ๋ฑ์ค๋ก ๋์ (MySQL InnoDB ๊ธฐ์ค) |
UNIQUE ์ธ๋ฑ์ค | ์ค๋ณต ์๋ ๊ณ ์ ๊ฐ์ ๊ฐ์ โ ์ค๋ณต ๋ฐ์ดํฐ ํ์ฉ X | ์ฌ๋ฌ ๊ฐ ์์ฑ ๊ฐ๋ฅ, NULL ํ์ฉ ๊ฐ๋ฅ (๋จ, NULL ์ค๋ณต์ ํ์ฉ) |
FULLTEXT ์ธ๋ฑ์ค | ๋์ฉ๋ ํ ์คํธ ํ๋์์ ๋จ์ด, ๋ฌธ์ฅ ๊ฒ์ ์ต์ ํ | CHAR , VARCHAR , TEXT ์ปฌ๋ผ์์ ์ฌ์ฉ, ์์ฐ์ด ๊ฒ์ ์ง์ |
SPATIAL ์ธ๋ฑ์ค | ๊ณต๊ฐ ๋ฐ์ดํฐ (์์น, ์ง๋ฆฌ์ ๋ณด ๋ฑ) ๊ฒ์ ์ต์ ํ | GIS ๋ฐ์ดํฐ(GEOMETRY , POINT , POLYGON ) ๋ฑ ๊ณต๊ฐ ์ฐ์ฐ์์ ๋น ๋ฅธ ๊ฒ์ ๊ฐ๋ฅ |
๐ ํด๋ฌ์คํฐ๋ & ๋ํด๋ฌ์คํฐ๋ ์ธ๋ฑ์ค
๊ตฌ๋ถ | ํด๋ฌ์คํฐ๋ ์ธ๋ฑ์ค (Clustered) | ๋ํด๋ฌ์คํฐ๋ ์ธ๋ฑ์ค (Non-Clustered) |
---|---|---|
์ ์ | ๋ฐ์ดํฐ๊ฐ ์ธ๋ฑ์ค ์์์ ๋ง๊ฒ ์ค์ ์ ์ฅ | ์ธ๋ฑ์ค์ ๋ฐ์ดํฐ๊ฐ ๋ณ๋ ์ ์ฅ, ํฌ์ธํฐ๋ก ์ฐ๊ฒฐ |
ํ ์ด๋ธ๋น ์์ฑ ์ | 1๊ฐ๋ง ๊ฐ๋ฅ (๊ธฐ๋ณธ ํค์ ๋์ผ) | ์ฌ๋ฌ ๊ฐ ๊ฐ๋ฅ |
์ฅ์ | ๋ฐ์ดํฐ ์ ๋ ฌ & ์กฐํ ๋น ๋ฆ, ๋ฒ์ ๊ฒ์ ํจ์จ์ | ๋ค์ํ ์ปฌ๋ผ์ ์ธ๋ฑ์ค ์์ฑ ๊ฐ๋ฅ, ๋ฐ์ดํฐ ์์ ์ ์ ์ฐ |
๋จ์ | ๋ฐ์ดํฐ ์ถ๊ฐ/์ญ์ ์ ๋ฌผ๋ฆฌ์ ์ฌ์ ๋ ฌ ํ์ โ ๋ถํ | ๋ฐ์ดํฐ ์กฐํ ์ ์ถ๊ฐ๋ก ๋ฐ์ดํฐ ์์น ํ์ ํ์ โ ๋๋ฆด ์ ์์ |
MariaDB์์ ์ ์ฉ ์์ | PRIMARY KEY = ํด๋ฌ์คํฐ๋ ์ธ๋ฑ์ค (InnoDB ์์ง ๊ธฐ์ค) | UNIQUE, ์ผ๋ฐ ์ธ๋ฑ์ค ๋ฑ ๋๋ถ๋ถ ๋ํด๋ฌ์คํฐ๋ ์ธ๋ฑ์ค |
๐ ๏ธ ๊ฐ ์ธ๋ฑ์ค ์ ํ๋ณ ์ฌ์ฉ ์์
1๏ธโฃ PRIMARY ์ธ๋ฑ์ค
CREATE TABLE student (
id INT PRIMARY KEY,
name VARCHAR(50)
);
๊ธฐ๋ณธ ํค๋ก ์๋ ์ธ๋ฑ์ค ์์ฑ, ๊ณ ์ ์๋ณ์ ๋ณด์ฅ!
2๏ธโฃ UNIQUE ์ธ๋ฑ์ค
CREATE UNIQUE INDEX idx_email ON student(email);
์ค๋ณต ์๋ ์ด๋ฉ์ผ ๋ณด์ฅ, NULL์ ์ฌ๋ฌ ๋ฒ ํ์ฉ
3๏ธโฃ FULLTEXT ์ธ๋ฑ์ค
CREATE FULLTEXT INDEX idx_content ON articles(content);
๋๋ ํ ์คํธ(content ์ปฌ๋ผ)์์ ๋น ๋ฅธ ๋จ์ด ๊ฒ์ ๊ฐ๋ฅ
4๏ธโฃ SPATIAL ์ธ๋ฑ์ค
CREATE SPATIAL INDEX idx_location ON places(location);
์์น ๊ธฐ๋ฐ ๋ฐ์ดํฐ ๊ฒ์ ์ต์ ํ, GIS ์ฟผ๋ฆฌ์์ ์ฑ๋ฅ UP!
โ ๏ธ ์ธ๋ฑ์ค ์ฃผ์์ฌํญ
๊ณ ๋ ค์ฌํญ | ์ค๋ช |
---|---|
๊ณผ๋ํ ์ธ๋ฑ์ค ์์ฑ X | ์ธ๋ฑ์ค๊ฐ ๋ง์ผ๋ฉด INSERT, UPDATE, DELETE ์ฑ๋ฅ ์ ํ |
๋ถํ์ํ ๋์ ์ธ๋ฑ์ค ์์ | ์์ฃผ ๊ฒ์, ์ ๋ ฌ, ์กฐ๊ฑด์ ์ ์ฌ์ฉ๋๋ ์ปฌ๋ผ ์์ฃผ๋ก ์ธ๋ฑ์ค ์์ฑ |
์นด๋๋๋ฆฌํฐ(Cardinality) ๊ณ ๋ ค | ์ปฌ๋ผ์ ๊ณ ์ ๊ฐ ๋น์จ์ด ๋์์๋ก ์ธ๋ฑ์ค ํจ์จ์ (์: ์ฃผ๋ฏผ๋ฒํธ, ID ๋ฑ) |
์ธ๋ฑ์ค ํฌ๊ธฐ ๊ด๋ฆฌ | ์ธ๋ฑ์ค๋ ๋์คํฌ ๊ณต๊ฐ ์ฐจ์ง โ ๋ถํ์ํ ์ธ๋ฑ์ค๋ ์ฃผ๊ธฐ์ ์ผ๋ก ์ ๊ฒ & ์ญ์ |
๐ ์ ๋ฆฌ
๐ ์ธ๋ฑ์ค๋? โ ๊ฒ์ ์ฑ๋ฅ ํฅ์ ์ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ, ์ฑ ์ ์์ธ์ฒ๋ผ ๋น ๋ฅธ ํ์ ๊ฐ๋ฅ |
---|
๐ ์ข ๋ฅ โ PRIMARY, UNIQUE, FULLTEXT, SPATIAL |
๐ ํด๋ฌ์คํฐ๋ vs ๋ํด๋ฌ์คํฐ๋ โ ์ ์ฅ ๋ฐฉ์ ์ฐจ์ด, ์ฑ๋ฅ ์ํฅ |
๐ ์ฃผ์ โ ๊ณผ๋ํ ์ธ๋ฑ์ค ์ฌ์ฉ ์ง์, DML ์์ ์ ์ค๋ฒํค๋ ๊ณ ๋ ค |
๐ ์ธ๋ฑ์ค๋? - ์ฑ ์ ๋ชฉ์ฐจ(์์ธ)์ ๊ฐ๋ค!
- ๋น์ : ๐ ๋๊บผ์ด ์ฑ ์์ ์ํ๋ ๋ด์ฉ์ ์ฐพ์ ๋, ๋งค๋ฒ ์ฑ ์ ์ฒด๋ฅผ ์ฒ์๋ถํฐ ๋๊น์ง ํ๋ ๊ฒ๋ณด๋ค ๋ชฉ์ฐจ๋ ์์ธ์ ๋ณด๋ฉด ๋ฐ๋ก ์ฐพ์ ์ ์์ฃ ?
โ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ง์ฐฌ๊ฐ์ง!
ํ ์ด๋ธ ์ ์ฒด๋ฅผ ์ฒ์๋ถํฐ ๊ฒ์ํ์ง ์๊ณ ์ธ๋ฑ์ค๋ผ๋ ๋ชฉ์ฐจ๋ฅผ ํตํด ๋น ๋ฅด๊ฒ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์๋ ๋๋ค.
๐ข ์ธ๋ฑ์ค์ ํจ๊ณผ
ํจ๊ณผ | ๋น์ | ์ค๋ช |
---|---|---|
1. ๋ฐ์ดํฐ ๊ฒ์ ์๋ ํฅ์ | ์ฑ ์ ์์ธ | ์ฑ ์ ์์ธ์ผ๋ก ํ์ด์ง๋ฅผ ๋ฐ๋ก ์ฐพ๋ฏ, WHERE ์กฐ๊ฑด์ ์ด์ ์ธ๋ฑ์ค๋ฅผ ๊ฑธ๋ฉด ๋น ๋ฅด๊ฒ ๋ฐ์ดํฐ ์ฐพ๊ธฐ ๊ฐ๋ฅ |
2. ์ ๋ ฌ๋ ๊ฒฐ๊ณผ ๋ฐํ | ์ฌ์ | ์ฌ์ ์ฒ๋ผ ์ด๋ฏธ ์ ๋ ฌ๋ ์ํ โ ORDER BY ์ ์ ๋ ฌ ์์
๋ถ๋ด์ด ์ ์ |
3. ๋ฒ์ ๊ฒ์ ์ต์ ํ | ์ ํ๋ฒํธ๋ถ | ์ด๋ฆ A~D๊น์ง๋ง ์ฐพ์ ๋, ์ ํ๋ฒํธ๋ถ์ฒ๋ผ ๋ฒ์ ๊ฒ์์ด ๋น ๋ฆ (์: WHERE age BETWEEN 20 AND 30 ) |
๐ ๏ธ ์ฑ๋ฅ ์ต์ ํ ๊ธฐ๋ฒ
์ต์ ํ ๋ฐฉ๋ฒ | ๋น์ | ์ค๋ช |
---|---|---|
1๏ธโฃ ์ ์ ํ ์ธ๋ฑ์ค ์ค๊ณ | ๊ฐ๊ฒ์์ ์์ฃผ ํ๋ฆฌ๋ ์ํ ์ง์ด๋์ ๋ฐฐ์น | ์์ฃผ ์ฐ์ด๋ ์ปฌ๋ผ(๊ฒ์, JOIN, ์ ๋ ฌ ์ปฌ๋ผ)์ ์ธ๋ฑ์ค๋ฅผ ๊ฑธ์ด์ผ ํจ๊ณผ์ ! ๋ถํ์ํ ์ธ๋ฑ์ค = ๊ณต๊ฐ ๋ญ๋น |
2๏ธโฃ ์ธ๋ฑ์ค ํต๊ณ ์ ์ง | ๋์๊ด ์ฑ ๋ฐฐ์น๋ ์ต์ ํ | ๋ฐ์ดํฐ๊ฐ ๋ง์์ง๋ฉด ์ธ๋ฑ์ค ํต๊ณ ์ ๋ณด๋ ์ ๋ฐ์ดํธ! โ DB๊ฐ ๋ ์ข์ ์คํ ๊ณํ ์ธ์ |
3๏ธโฃ ์ธ๋ฑ์ค ๊ฐฑ์ ๋น์ฉ ๊ณ ๋ ค | ์ฑ ๋ง๋ค ์์ธ ๋ถ์ด๊ธฐ = ๊ด๋ฆฌ ๋น์ฉ | INSERT, UPDATE, DELETE ์ ์ธ๋ฑ์ค๋ ๊ฐ์ด ์์ โ ๋๋ฌด ๋ง์ผ๋ฉด ์คํ๋ ค ๋๋ ค์ง. ๊ผญ ํ์ํ ๊ฒ๋ง! |
4๏ธโฃ ์ฟผ๋ฆฌ ์ต์ ํ (๋ฆฌํฉํ ๋ง) | ๊ฐ๊ฒ์์ ์๋ ๋์ ์งง๊ฒ ์ ๋ฆฌ | ๋ถํ์ํ JOIN, WHERE ์กฐ๊ฑด ์ ๊ฑฐ & ์ธ๋ฑ์ค ์ ํ๋๋ก ์ฟผ๋ฆฌ ์์ฑ! โ ์คํ ๊ณํ(EXPLAIN)์ผ๋ก ํ์ธ ๊ฐ๋ฅ |
๐ฅ ๋น์ ๋ก ์ฝ๊ฒ ํต์ฌ ์ ๋ฆฌ
๊ฐ๋ | ๋น์ | ์์ |
---|---|---|
์ธ๋ฑ์ค | ์ฑ ์ ์์ธ, ๋์๊ด์ ์ฑ ๋ฐฐ์น๋ | ๋น ๋ฅด๊ฒ ์ํ๋ ๋ฐ์ดํฐ ์์น ์ฐพ๊ธฐ |
๋๋ฌด ๋ง์ ์ธ๋ฑ์ค | ๋ชจ๋ ํ์ด์ง์ ํฌ์คํธ์ ๋ถ์ฌ๋๊ธฐ | ์คํ๋ ค ๊ด๋ฆฌ ๋ถ๋ด, ์ฑ๋ฅ ์ ํ |
์ ์ ํ ์ธ๋ฑ์ค ์ค๊ณ | ๊ฐ๊ฒ์์ ์ธ๊ธฐ ์ํ ์์ ๋ฐฐ์น | ์์ฃผ ์ฐ๋ ์ด์๋ง ์ธ๋ฑ์ค ๊ฑธ๊ธฐ |
๊ฐฑ์ ๋น์ฉ | ์ฑ ๋ด์ฉ ๋ฐ๊ฟ ๋๋ง๋ค ์์ธ ๋ค์ ๋ง๋ค๊ธฐ | DML ์์ ๋ง์ผ๋ฉด ์ธ๋ฑ์ค ๋ถ๋ด ์ปค์ง |
์ฟผ๋ฆฌ ์ต์ ํ | ๋์ ์ค์ด๊ธฐ, ๋ฉ๋ด ์ ๋ฆฌ | ์ฟผ๋ฆฌ ์์์ ์ธ๋ฑ์ค ์ ํ์ฉํ๋๋ก ์์ฑ |
๐ ์ค๋ฌด ์ ์ฉ ๊ฟํ (๋น์ ํฌํจ)
๊ฟํ | ๋น์ | ์ค๋ช |
---|---|---|
1๏ธโฃ WHERE, JOIN, ORDER BY์ ์์ฃผ ์ฐ๋ ์ปฌ๋ผ = ์ธ๋ฑ์ค ํ๋ณด | ๐ช ๋งํธ์์ ์ฌ๋๋ค์ด ์์ฃผ ์ฐพ๋ ๋ฌผ๊ฑด์ ์ ๊ตฌ ๊ทผ์ฒ์ ๋ฐฐ์น! | ์ฌ๋๋ค์ด ์์ฃผ ์ฐพ๋ ์ํ(์์ฃผ ๊ฒ์ํ๋ ์ปฌ๋ผ)์ ์ ๊ตฌ(์ธ๋ฑ์ค) ๊ฐ๊น์ด์ ๋์ด์ผ ์ฐพ๊ธฐ ๋น ๋ฆ! โ WHERE, JOIN, ORDER BY์ ์์ฃผ ๋ฑ์ฅํ๋ ์ปฌ๋ผ์ ๊ผญ ์ธ๋ฑ์ค! |
2๏ธโฃ EXPLAIN์ผ๋ก ์ธ๋ฑ์ค ์ฌ์ฉ ์ฌ๋ถ, Full Scan ์ฌ๋ถ ๊ผญ ํ์ธ | ๐ ์ง๋ ์ฑ์์ ๊ฒฝ๋ก ๋ฏธ๋ฆฌ ํ์ธํ๋ ๊ฒ! | ๋ชฉ์ ์ง(์ฟผ๋ฆฌ ๊ฒฐ๊ณผ) ๊ฐ๊ธฐ ์ ์ ๋น ๋ฅธ ๊ธธ(์ธ๋ฑ์ค ํ๋์ง) ํ์ธํ๋ ๊ฒ! EXPLAIN์ผ๋ก ์คํ ๊ณํ ๋ณด๋ฉด, ์ ์ฒด ํ ์ด๋ธ ๋ค ํ๋ Full Scan์ธ์ง ํ์ธ ๊ฐ๋ฅ! ๋ถํ์ํ Full Scan โ ๐ซ |
3๏ธโฃ DML ๋น๋ฒํ ํ ์ด๋ธ์ ์ธ๋ฑ์ค ์ต์ํ (๋ณ๊ฒฝ ๋น์ฉโ) | ๐ฆ ์์ฃผ ์ ๋ฆฌํ๋ ์ฐฝ๊ณ ์ ํฌ์คํธ์ ๋๋ฌด ๋ง์ด ๋ถ์ด๋ฉด ์ ๋ฆฌํ๊ธฐ ๋ถํธ! | INSERT, UPDATE, DELETE ์์ฃผ ํ๋ ํ ์ด๋ธ์ ์ธ๋ฑ์ค ๋ง์ผ๋ฉด ๋งค๋ฒ ์ธ๋ฑ์ค๋ ๊ฐ์ด ๊ฐฑ์ ํด์ผ ํจ โ ๋๋ ค์ง! ๊ผญ ํ์ํ ์ธ๋ฑ์ค๋ง ์ต์ํ |
4๏ธโฃ ๋ค์ค ์ปฌ๋ผ ์ธ๋ฑ์ค๋ ์ปฌ๋ผ ์์ ์ค์ (๊ฐ์ฅ ์์ฃผ ์กฐ๊ฑด ๊ฑฐ๋ ์ด ๋จผ์ !) | ๐๏ธ ๋๋ก ํ์งํ: ๊ณ ์๋๋ก์์ ๋จผ์ ๋์ค๋ ๋ฐฉํฅ ํ์! | ์๋ฅผ ๋ค์ด (A, B) ์์๋ก ๋ง๋ ์ธ๋ฑ์ค๋ฉด, A ๊ธฐ์ค์ผ๋ก ๊ฒ์ํด์ผ ์ธ๋ฑ์ค ์ ๋๋ก ์ฌ์ฉ๋จ. B ๋จผ์ ์ฐ๋ฉด ์ธ๋ฑ์ค ๋ฌด์ฉ์ง๋ฌผ! โ ๊ฐ์ฅ ๋ง์ด ์กฐ๊ฑด ๊ฑฐ๋ ์ปฌ๋ผ์ ์์ ๋ฐฐ์น! |
๐ฏ ํ ์ค ํต์ฌ ์ ๋ฆฌ
๊ฟํ ๋ฒํธ | ํต์ฌ |
---|---|
1๏ธโฃ | ์์ฃผ ๊ฒ์, ์ ๋ ฌ, JOIN์ ์ฐ์ด๋ ์ปฌ๋ผ โ ๋ฐ๋์ ์ธ๋ฑ์ค ํ๋ณด |
2๏ธโฃ | EXPLAIN์ผ๋ก ํญ์ ์คํ ๊ณํ ํ์ธ โ Full Scan ๋์ค๋ฉด ๊ฐ์ ํ์! |
3๏ธโฃ | INSERT, UPDATE ๋ง์ ํ ์ด๋ธ์ ์ธ๋ฑ์ค ์ต์ํ โ DML ๋ถ๋ด ์ค์ด๊ธฐ |
4๏ธโฃ | ๋ค์ค ์ปฌ๋ผ ์ธ๋ฑ์ค โ ๊ฐ์ฅ ์์ฃผ ํํฐ ๊ฑฐ๋ ์ปฌ๋ผ๋ถํฐ ๋จผ์ ! |
๐ ๊ฒฐ๋ก
- ์ธ๋ฑ์ค = ์ฑ ์ ์์ธ, ๋น ๋ฅธ ๊ฒ์ ๋๊ตฌ
- ์ ์ค๊ณํ๋ฉด ๊ฒ์์ ๋น ๋ฅด๊ณ ํจ์จ์ !
- ๊ทธ๋ฌ๋ ๋๋ฌด ๋ง๊ฑฐ๋ ์๋ชป ๊ด๋ฆฌํ๋ฉด ์คํ๋ ค ์ฑ๋ฅ ์ ํ
- ์ฟผ๋ฆฌ ๋ฆฌํฉํ ๋ง, ํต๊ณ ๊ด๋ฆฌ, ์ธ๋ฑ์ค ์ฌ์ค๊ณ โ ๊พธ์คํ ๊ด๋ฆฌํด์ผ ๊ณ ์ฑ๋ฅ ์ ์ง! ๐
๐ ์คํ ๊ณํ ๋ถ์
๐ ์คํ ๊ณํ์ด๋?
์คํ ๊ณํ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๊ธฐ ์ํด ์ ํํ ๊ฒฝ๋ก๋ฅผ ์ค๋ช
ํ๋ ๊ฒ์ผ๋ก, ์ฟผ๋ฆฌ์ ์ฑ๋ฅ์ ๋ถ์ํ๊ณ ์ต์ ํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. MySQL์์๋ EXPLAIN
๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ์คํ ๊ณํ์ ํ์ธํ ์ ์์ต๋๋ค.
๐ ๏ธ EXPLAIN
๋ช
๋ น์ด ์ฌ์ฉ๋ฒ
EXPLAIN SELECT * FROM employees WHERE department_id = 10;
์ ๋ช ๋ น์ด๋ฅผ ์คํํ๋ฉด, ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ํด๋น ์ฟผ๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ๋์ง์ ๋ํ ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด ์ ๋ณด๋ฅผ ํตํด ์ฟผ๋ฆฌ์ ์ฑ๋ฅ ๋ณ๋ชฉ ์ง์ ์ ํ์ ํ๊ณ ์ต์ ํํ ์ ์์ต๋๋ค.
๐ ์ฟผ๋ฆฌ ์ต์ ํ ๊ธฐ๋ฒ
๐ ๏ธ ์ฟผ๋ฆฌ ๋ฆฌํฉํ ๋ง์ ํตํ ์๋ ํฅ์
- ์๋ธ์ฟผ๋ฆฌ ์ต์ ํ
- ์๋ธ์ฟผ๋ฆฌ๋ ์ข ์ข ์ฑ๋ฅ ์ ํ์ ์์ธ์ด ๋ ์ ์์ต๋๋ค. ์ด๋ฅผ ๊ณตํต ํ ์ด๋ธ ํํ์(CTE)์ด๋ ์กฐ์ธ์ผ๋ก ๋ณํํ์ฌ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
์์: ์๋ธ์ฟผ๋ฆฌ๋ฅผ CTE๋ก ๋ณํ
WITH MaxSalary AS ( SELECT MAX(salary) AS max_salary FROM salaries WHERE from_date > '2000-01-01' ) SELECT e.emp_no, e.first_name, e.last_name, s.salary FROM employees e JOIN salaries s ON e.emp_no = s.emp_no JOIN MaxSalary ms ON s.salary = ms.max_salary WHERE e.hire_date < '1995-01-01' ORDER BY e.hire_date DESC;
์ ์์์์ ์๋ธ์ฟผ๋ฆฌ๋ฅผ CTE๋ก ๋ณํํ์ฌ ์ฑ๋ฅ์ ํฅ์์์ผฐ์ต๋๋ค.
- ์ธ๋ฑ์ค ํ์ฉ
- ์ ์ ํ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ์ฌ ๋ฐ์ดํฐ ๊ฒ์ ์๋๋ฅผ ํฅ์์ํฌ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ณผ๋ํ ์ธ๋ฑ์ค๋ ์คํ๋ ค ์ฑ๋ฅ์ ์ ํ์ํฌ ์ ์์ผ๋ฏ๋ก, ํ์ํ ์ธ๋ฑ์ค๋ง ์์ฑํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
์์: ์ธ๋ฑ์ค ์์ฑ
CREATE INDEX idx_salaries_salary ON salaries(salary); CREATE INDEX idx_salaries_from_date ON salaries(from_date); CREATE INDEX idx_employees_hire_date ON employees(hire_date);
์ ์์์์๋ ์ฟผ๋ฆฌ์์ ์์ฃผ ์ฌ์ฉ๋๋ ์ด์ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ์ฌ ์ฑ๋ฅ์ ํฅ์์์ผฐ์ต๋๋ค.
- ๋ถํ์ํ ์ปฌ๋ผ ์ ๊ฑฐ: ์ฌ์ฉํ์ง ์๋ ์ปฌ๋ผ์ ์กฐํ๋ฅผ ํผํ์ฌ I/O ๋ถ๋ด์ ์ค์ ๋๋ค.
- ์กฐ์ธ ์์ ์ต์ ํ: ์กฐ์ธ์ ์์๋ฅผ ๋ณ๊ฒฝํ์ฌ ์์ ํ ์ด๋ธ๋ถํฐ ๋จผ์ ์กฐ์ธํ๋๋ก ํ์ฌ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
๐ ์ฟผ๋ฆฌ ์ต์ ํ ๊ธฐ๋ฒ ์ฝ๊ฒ ์ดํดํ๊ธฐ!
๊ธฐ๋ฒ | ๋น์ | ์ค๋ช |
---|---|---|
1๏ธโฃ ์๋ธ์ฟผ๋ฆฌ ์ต์ ํ โ CTE๋ก ๋ณํ | ๐ญ ๊ณต์ฅ์์ ๋งค๋ฒ ์ฌ๋ฃ๋ฅผ ๋ฐ๋ก๋ฐ๋ก ์ฃผ๋ฌธํ๋ ๊ฒ๋ณด๋ค ํ ๋ฒ์ ์ฌ๊ณ ์ ๋ฆฌํด๋๊ณ ์ฐ๋ ๊ฒ! | ์๋ธ์ฟผ๋ฆฌ๋ฅผ ๊ณ์ ์คํํ๋ฉด ๋งค๋ฒ ์๋ก ๊ฒ์ํ๋๋ผ ์๊ฐ ๋ญ๋น. โ CTE(Common Table Expression)๋ก ํ ๋ฒ ์ ๋ฆฌํด๋๊ณ ์ฌ๋ฌ ๋ฒ ์ฌํ์ฉํ๋ฉด ๋น ๋ฆ! |
2๏ธโฃ ์ธ๋ฑ์ค ํ์ฉ | ๐ ์ฑ ์ ์์ธ(Index)์ด ์์ผ๋ฉด, ์ํ๋ ๋ด์ฉ ๋ฐ๋ก ์ฐพ์ ์ ์์! | WHERE, JOIN, ORDER BY์์ ์์ฃผ ์ฐ๋ ์ปฌ๋ผ์ ์ธ๋ฑ์ค๋ฅผ ๊ฑธ์ด์ฃผ๋ฉด ๊ฒ์์ด ํจ์ฌ ๋น ๋ฆ. ๋จ, ๋๋ฌด ๋ง์ ์์ธ(์ธ๋ฑ์ค)์ ์คํ๋ ค ์ฑ ์ด ๋๊บผ์์ง๊ณ ๊ด๋ฆฌ๊ฐ ํ๋ค์ด์ง (DML ์ ๋น์ฉ โ) |
3๏ธโฃ ๋ถํ์ํ ์ปฌ๋ผ ์ ๊ฑฐ | ๐ฑ ๋์๋ฝ ๋ฐฐ๋ฌํ ๋ ์ ๋จน์ ๋ฐ์ฐฌ๊น์ง ๋ค ์ธ์ค๋ฉด ๋ฌด๊ฑฐ์์ง๊ณ ๋๋ ค์ง! | ์ฟผ๋ฆฌ์์ ํ์ํ ์ปฌ๋ผ๋ง SELECT! โ SELECT * ์ฌ์ฉ ๊ธ์ง! โ ๋ถํ์ํ ๋ฐ์ดํฐ๊น์ง ๋ค๊ณ ์ค๋ I/O ๋ถ๋ด ์ค์ |
4๏ธโฃ ์กฐ์ธ ์์ ์ต์ ํ | ๐ ๋งํธ์์ ์ฅ ๋ณผ ๋ ๋ฌด๊ฑฐ์ด ์๋ถํฐ ๋จผ์ ์ฌ๊ณ ๋์๋ค๋๋ฉด ํ๋ฆ โ ๊ฐ๋ฒผ์ด ๊ฒ๋ถํฐ ๋จผ์ ๋ด๊ธฐ! | ํฐ ํ ์ด๋ธ ๋จผ์ ์กฐ์ธํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋ถ๋ด ์ปค์ง โ ์์ ํ ์ด๋ธ๋ถํฐ ๋จผ์ ์กฐ์ธํ๋๋ก ์ฟผ๋ฆฌ ์์ฑ! |
๐ฏ ํต์ฌ ์ ๋ฆฌ
์ต์ ํ ๊ธฐ๋ฒ | ํ ์ค ์์ฝ |
---|---|
์๋ธ์ฟผ๋ฆฌ โ CTE๋ก ๋ณํ | ๊ณตํต ๋ฐ์ดํฐ๋ฅผ ๋จผ์ ๊ณ์ฐ & ์ ์ฅ, ์ค๋ณต ์ฐ์ฐ ์ค์ด๊ธฐ |
์ธ๋ฑ์ค ํ์ฉ | ์ฑ ์ ์์ธ์ฒ๋ผ ๋น ๋ฅธ ๊ฒ์์ฉ, ํ์ํ ์ด๋ง! |
๋ถํ์ํ ์ปฌ๋ผ ์ ๊ฑฐ | ํ์ํ ์ ๋ณด๋ง ๋ค๊ณ ์ค๊ธฐ! SELECT * ๊ธ์ง! |
์กฐ์ธ ์์ ์ต์ ํ | ์์ ํ ์ด๋ธ๋ถํฐ ๋จผ์ ์กฐ์ธํด์ ๋ฉ๋ชจ๋ฆฌ ๋ถ๋ด ์ค์ด๊ธฐ |
โ๏ธ ์บ์ ๋ฐ ์ฑ๋ฅ ํ๋ ๊ธฐ๋ฒ
- ์ฟผ๋ฆฌ ์บ์ ํ์ฉ
- ๋ฐ๋ณต์ ์ผ๋ก ์คํ๋๋ ๋์ผํ ์ฟผ๋ฆฌ์ ๋ํด ๊ฒฐ๊ณผ๋ฅผ ์บ์ํ์ฌ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ MySQL 8.0๋ถํฐ๋ ์ฟผ๋ฆฌ ์บ์ ๊ธฐ๋ฅ์ด ์ ๊ฑฐ๋์์ผ๋ฏ๋ก, ์ ํ๋ฆฌ์ผ์ด์ ๋ ๋ฒจ์์ ์บ์ฑ์ ๊ตฌํํด์ผ ํฉ๋๋ค.
- ์ตํฐ๋ง์ด์ ํํธ ์ฌ์ฉ
- ์ฟผ๋ฆฌ ์คํ ์ ์ตํฐ๋ง์ด์ ์๊ฒ ํน์ ์คํ ๊ณํ์ ์ฌ์ฉํ๋๋ก ์ง์ํ๋ ํํธ๋ฅผ ์ ๊ณตํ์ฌ ์ฑ๋ฅ์ ์ต์ ํํ ์ ์์ต๋๋ค.
์์: ์ธ๋ฑ์ค ํํธ ์ฌ์ฉ
SELECT * FROM test USE INDEX (idx_name) WHERE name IN ('1', '2', ..., '150') AND second_name IN ('1', '2', ..., '150');
์ ์์์์๋
USE INDEX
ํํธ๋ฅผ ์ฌ์ฉํ์ฌ ํน์ ์ธ๋ฑ์ค๋ฅผ ํ์ฉํ๋๋ก ์ง์ํ์์ต๋๋ค. - ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ๋ผ๋ฏธํฐ ํ๋
- ์๋ฒ์ ๋ฉ๋ชจ๋ฆฌ, ์คํ ๋ฆฌ์ง ์ฑ๋ฅ, ๋คํธ์ํฌ ๋์ญํญ ๋ฑ์ ๊ณ ๋ คํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ค์ ๊ฐ์ ์กฐ์ ํจ์ผ๋ก์จ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค. -
๐ ์บ์ ๋ฐ ์ฑ๋ฅ ํ๋ ๊ธฐ๋ฒ ์ฝ๊ฒ ์ดํดํ๊ธฐ!
๊ธฐ๋ฒ | ๋น์ | ์ค๋ช |
---|---|---|
1๏ธโฃ ์ฟผ๋ฆฌ ์บ์ ํ์ฉ | ๐ฝ๏ธ ์์ฃผ ์ฃผ๋ฌธํ๋ ๋ฉ๋ด๋ ๋ฏธ๋ฆฌ ๋ง๋ค์ด ๋๊ณ ๋ฐ๋ก ๋ด์ฃผ๋ ํจ์คํธํธ๋์ ! | ๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ๊ณ์ ์์ฒญํ๋ฉด, ๋งค๋ฒ ์๋ก ์๋ฆฌํ์ง ์๊ณ ๋ฏธ๋ฆฌ ๊ฒฐ๊ณผ ์ ์ฅ(์บ์)ํด ๋์๋ค๊ฐ ๋ฐ๋ก ์ ๊ณต โ ์๋ ํฅ์!โป MySQL 8.0 ์ด์์์๋ ์๋ฒ ๋ ๋ฒจ ์บ์๋ ์ฌ๋ผ์ ธ์, ์ ํ๋ฆฌ์ผ์ด์ ์์ Redis ๊ฐ์ ์บ์ ์จ์ผ ํจ! |
2๏ธโฃ ์ตํฐ๋ง์ด์ ํํธ ์ฌ์ฉ | ๐ฆ ๋ด๋น๊ฒ์ด์ ์๊ฒ โ์ด ๊ธธ๋ก ๊ฐ!โ๋ผ๊ณ ์๋ ค์ฃผ๋ ๊ฒ! | DB๊ฐ ์ฟผ๋ฆฌ ์คํ ๊ณํ์ ์ค์ค๋ก ์ง์ง๋ง, ๊ฐ๋ ๋์๊ฐ๋ ๊ธธ์ ์ ํํ ์๋ ์์. โ ํํธ(์: USE INDEX)๋ก ๋น ๋ฅธ ๊ธธ์ ๊ฐ์ ๋ก ์๋ ค์ฃผ๊ธฐ! |
3๏ธโฃ DB ํ๋ผ๋ฏธํฐ ํ๋ | ๐ ๏ธ ์๋์ฐจ ์์ง, ํ์ด์ด ๊ณต๊ธฐ์, ์ฐ๋ฃ ํจ์จ ์กฐ์ ํ๋ ๊ฒ! | ์๋ฒ ๋ฉ๋ชจ๋ฆฌ, ๋ฒํผ ํฌ๊ธฐ, ์ค๋ ๋ ์ ๋ฑ์ ์๋์ฐจ ์ธํ ๊ณผ ๊ฐ์. โ ๋ฉ๋ชจ๋ฆฌ ๋๋ฌด ์ ์ผ๋ฉด ๋๋ฆผ, ๋๋ฌด ๋ง์ผ๋ฉด ๋ญ๋น โ ์๋ฒ ํ๊ฒฝ์ ๋ง๊ฒ ๋ง์ถค ์ค์ ํ์! |
๐ฏ ํต์ฌ ์ ๋ฆฌ
์ฑ๋ฅ ํ๋ ๊ธฐ๋ฒ | ์ฝ๊ฒ ์ดํดํ๋ ํ ์ค |
---|---|
์ฟผ๋ฆฌ ์บ์ | ์์ฃผ ์์ฒญ๋๋ ๋ฉ๋ด๋ ๋ฏธ๋ฆฌ ๋ง๋ค์ด ๋ (์๋ โ) |
์ตํฐ๋ง์ด์ ํํธ | ๋ด๋น๊ฒ์ด์ ์๊ฒ โ์ด์ชฝ ๊ธธ๋ก ๊ฐ!โ ์๋ ค์ฃผ๋ ๊ฒ |
DB ํ๋ผ๋ฏธํฐ ํ๋ | ์๋์ฐจ ์์ง ์ธํ ๋ง์ถ๋ฏ, ์๋ฒ ํ๊ฒฝ์ ์ต์ ํ |