ํด๋น ํฌ์คํ ์ ์ ๋ฌด์ ๋ฐ๋ก ์ฐ๋ SQL ํ๋ ๋์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ฑํ์์ต๋๋ค.
์ด์ ์ง์ฅ์์๋ ์ฃผ๋ก ์ค๋ผํด์ ์ฌ์ฉํ์๊ณ , ์์ผ๋ก๋ MySQL(MariaDB, Postgresql...) ์ ์ฌ์ฉํ ์์ ์ด๊ธฐ์ ๊ด๋ จํ์ฌ ์คํ ๊ณํ ๋ฐ ์ฌ๋ฌ SQL ํ๋ ๊ธฐ๋ฒ๋ค์ ๋ํด ์ ๋ฆฌํด ๋ณด๊ณ ์ ํฉ๋๋ค. ์์ ์ Real MySQL ๋์๋ฅผ ํตํด ์ด๋ก ์ ์ผ๋ก ํ์ตํ์์ง๋ง, ์ค๋ผํด์ ์ฃผ๋ก ์ฌ์ฉํ๋ค๋ณด๋ MySQL์ ์ฃผ์ ์คํ ๊ณํ์ ๋ํด์๋ ์ ๋ฆฌ ์ฐจ์์์ ๋ค์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์ฑ ์ ์์ ๋ค์ ํตํด ํ์์ ์ด๋ก ์ผ๋ก๋ง ์๊ณ ์์๋ ๋ด์ฉ๋ค์ด๋ ๊ฒฝํ์ด ์์๋ ํ๋๋ค ๋ฑ ๋ค์ํ๊ฒ ๊ฒฝํํด๋ณผ ์ ์์ด ์ข์์ต๋๋ค.
์ฑ ์ ์์ ๋ค์ ํตํด ์ ํ ์๋ก์ด ์ ๊ทผ์ด๋, ํ์์ ์ด๋ก ์ผ๋ก๋ง ์๊ณ ์์๋ ๋ด์ฉ๋ค, ์กฐ๊ธ์ด๋๋ง ๊ฒฝํ์ด ์์๋ ์ฟผ๋ฆฌ ๋ฑ ์ ํด์ง ๋ฐ์ดํฐ ํ์์ด๊ธด ํ์ง๋ง ๋ค์ํ๊ฒ ๊ฒฝํํด๋ณผ ์ ์์ด์ ์ข์์ต๋๋ค.
์ค์ SQL ํ๋์ ์งํํ๊ธฐ ์ ๊ฐ๋จํ๊ฒ ํ๋์ ํ์ํ ์ฉ์ด๋ค์ ์ ๋ฆฌํ๊ณ , ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๋ฉฐ ๊ฐ์ ํด๋ด ๋๋ค.
1. SQL ํ๋ ์ฉ์ด๋ฅผ ์ง๊ด์ ์ผ๋ก ์ดํดํ๊ธฐ
๋๋ผ์ด๋น ํ ์ด๋ธ, ๋๋ฆฌ๋ธ ํ ์ด๋ธ
SELECT ํ์.ํ๋ฒ, ํ์.์ด๋ฆ, ๋น์์ฐ๋ฝ๋ง.๊ด๊ณ, ๋น์์ฐ๋ฝ๋ง.์ฐ๋ฝ์ฒ
FROM ํ์
JOIN ๋น์์ฐ๋ฝ๋ง ON ํ์.ํ๋ฒ = ๋น์์ฐ๋ฝ๋ง.ํ๋ฒ
WHERE ํ์.ํ๋ฒ IN (1, 100)
- ๋๋ผ์ด๋น ํ ์ด๋ธ: ๋จผ์ ์ ๊ทผํ๋ ํ ์ด๋ธ (ํ์)
- ๋๋ฆฌ๋ธ ํ ์ด๋ธ: ํํ์ผ๋ก ์ ๊ทผํ๋ ํ ์ด๋ธ (๋น์์ฐ๋ฝ๋ง)
- ๋๋ผ์ด๋น ํ ์ด๋ธ -> ๊ฐ๋ฅํ ์ ์ ๊ฒฐ๊ณผ๊ฐ ๋ฐํ๋ ๊ฒ์ผ๋ก ์์๋๋ ํ ์ด๋ธ
๊ฐ๋ ์ ์ธ ํ๋ ์ฉ์ด
- ์ค๋ธ์ ํธ ์ค์บ ์ ํ -> ํ ์ด๋ธ ์ค์บ๊ณผ ์ธ๋ฑ์ค ์ค์บ์ผ๋ก ๊ตฌ๋ถํฉ๋๋ค.
- ํ ์ด๋ธ ์ค์บ: ์ธ๋ฑ์ค๋ฅผ ๊ฑฐ์น์ง ์๊ณ ๋ฐ๋ก ๋์คํฌ์ ์์นํ ํ ์ด๋ธ ๋ฐ์ดํฐ์ ์ ๊ทผํ๋ ์ ํ
- ์ธ๋ฑ์ค ์ค์บ: ์ธ๋ฑ์ค๋ก ํ ์ด๋ธ ๋ฐ์ดํฐ๋ฅผ ์ ๊ทผํ๋ ์ ํ
ํ ์ด๋ธ ํ ์ค์บ (table full scan)
- ์ธ๋ฑ์ค๋ฅผ ๊ฑฐ์น์ง ์๊ณ ํ ์ด๋ธ๋ก ๋ฐ๋ก ์ ๊ทผํ์ฌ ์ฒ์๋ถํฐ ๋๊น์ง ๋ฐ์ดํฐ๋ฅผ ํ์ด๋ณด๋ ๋ฐฉ์
- WHERE ์ ์ ์กฐ๊ฑด๋ฌธ์ ๊ธฐ์ค์ผ๋ก ํ์ฉํ ์ธ๋ฑ์ค๊ฐ ์๊ฑฐ๋, ์ ์ฒด ๋ฐ์ดํฐ ๋๋น ๋๋์ ๋ฐ์ดํฐ๊ฐ ํ์ํ ๋, ์ธ๋ฑ์ค ํ์ฉ๋ณด๋ค ํ ์ด๋ธ ํ ์ค์บ์ด ํจ์จ์ ์ด๋ผ๊ณ ํ๋จํ ๋ ์ํํ ์ ์์ต๋๋ค.
์ธ๋ฑ์ค ๋ฒ์ ์ค์บ (index range scan)
- ์ธ๋ฑ์ค๋ฅผ ๋ฒ์(range) ๊ธฐ์ค์ผ๋ก ์ค์บํ ๋ค ์ค์บ ๊ฒฐ๊ณผ๋ฅผ ํ ๋๋ก ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๋ ๋ฐฉ์
- ex) BETWEEN, AND, <, >, LIKE ๊ตฌ๋ฌธ ๋ฑ์ ํ์ฉ
- ์ข์ ๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ์ค์บํ ๋๋ ํจ์จ์ ์ผ ์ ์์ผ๋, ๋์ ๋ฒ์ ์ค์บ ์ ๋นํจ์จ์ ์ผ ์ ์์ต๋๋ค.
์ธ๋ฑ์ค ํ ์ค์บ (index full scan)
- ์ธ๋ฑ์ค๋ฅผ ์ฒ์๋ถํฐ ๋๊น์ง ์ํํ๋ ๋ฐฉ์
- ํ ์ด๋ธ์ ์ ๊ทผํ์ง ์๊ณ , ์ธ๋ฑ์ค๋ก ๊ตฌ์ฑ๋ ์ด ์ ๋ณด๋ง ์๊ตฌํ๋ SQL ๋ฌธ์์ ์ธ๋ฑ์ค ํ ์ค์บ์ด ์ํ
- ์ธ๋ฑ์ค๋ ํ ์ด๋ธ๋ณด๋ค ์๋์ ์ผ๋ก ์ ์ ์์ ์ฐจ์งํ๋ฏ๋ก ํ ์ด๋ธ ํ ์ค์บ๋ณด๋ค๋ ์ฑ๋ฅ์ ์ ๋ฆฌ
- ํ์ง๋ง, ์ธ๋ฑ์ค๋ผ๋ ์ค๋ธ์ ํธ์ ์ ์์ญ์ ๊ฒ์ํ๋ ๋ฐฉ์์ธ ๋งํผ ๊ฒ์ ๋ฒ์๋ฅผ ์ต๋ํ ์ค์ด๋ ๋ฐฉํฅ์ผ๋ก ํ๋
์ธ๋ฑ์ค ๊ณ ์ ์ค์บ (index unique scan)
- ๊ธฐ๋ณธ ํค๋ ๊ณ ์ ์ธ๋ฑ์ค๋ก ํ ์ด๋ธ์ ์ ๊ทผํ๋ ๋ฐฉ์์ผ๋ก, ์ธ๋ฑ์ค ์ฌ์ฉ ์ค์บ ๋ฐฉ์ ์ค ๊ฐ์ฅ ํจ์จ์ ์ธ ๋ฐฉ์
- WHERE ์ ์ = ์กฐ๊ฑด๋ฌธ์ผ๋ก ์์ฑํ๋ฉฐ, ํด๋น ์ด์ด PK๋ unique index์ ์ ๋ ์ด๋ก ์ ์ ๋์์ ๋ ํ์ฉ
์ต์ํ์ ํ์ด์ง(๋ฐ์ดํฐ ๊ฒ์ ์ต์ ๋จ์) ์ ์ ๊ทผํ ์ ์๋๋ก ์ ๊ทผ ๋ฒ์๋ฅผ ์ค์ด๊ณ , ํจ์จ์ ์ธ ์ธ๋ฑ์ค๋ฅผ ํ์ฉํ ์ ์๋๋ก ํ๋
์นด๋๋๋ฆฌํฐ (cardinality)
- 'ํ๋์ ๋ฐ์ดํฐ ์ ํ์ผ๋ก ์ ์๋๋ ๋ฐ์ดํฐ ํ์ ๊ฐฏ์'
- ์ ์ฒด ๋ฐ์ดํฐ์ ์ ๊ทผํ ๋ค ์ถ๋ ฅ๋ ๊ฒ์ด๋ผ ์์๋๋ ๋ฐ์ดํฐ ๊ฑด์
- ์ ์ฒด ํ์ ๋ํ ํน์ ์ด์ ์ค๋ณต ์์น๋ฅผ ๋ํ๋ด๋ ์งํ
- ex) ์ฃผ๋ฏผ๋ฑ๋ก๋ฒํธ -> unique, ์นด๋๋๋ฆฌํฐ๊ฐ ๋๋ค.
- ex) ์ฑ๋ณ -> M/W, ์นด๋๋๋ฆฌํฐ๊ฐ ๋ฎ๋ค.
์ฝ๋ ์ด์ (collation)
- ํน์ ๋ฌธ์์ ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋ ๊ฐ์ ๋น๊ตํ๊ฑฐ๋ ์ ๋ ฌํ๋ ์์ ์ ๊ท์น (utf8_bin, utf_8_general_ci)
- ์บ๋ฆญํฐ์ (charset): ๋ฐ์ดํฐ ์ ์ฅ์ ์ด๋ป๊ฒ ํ ๊ฒ์ธ๊ฐ?
- ์ฝ๋ ์ด์ (collation): ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ด๋ป๊ฒ ํ ๊ฒ์ธ๊ฐ?
2. SQL ํ๋์ ์คํ ๊ณํ ํํค์น๊ธฐ
์๋ ์คํ ๊ณํ์ ๊ฐ๋จํ๊ฒ ์ ๋ฆฌํ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ๋ํด ํ์ตํ๊ณ ์ถ๋ค๋ฉด ์๋ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์:
https://zzang9ha.tistory.com/436
id
- SQL ๋ฌธ์ด ์ํ๋๋ ์คํ ์์๋ฅผ ํ์ํ๋ ์ซ์
- ์กฐ์ธํ ๋๋ ๋์ผํ id
select_type
- SQL ๋ฌธ์ ๊ตฌ์ฑํ๋ SELECT ๋ฌธ์ ์ ํ์ ์ถ๋ ฅํ๋ ํญ๋ชฉ
- SIMPLE, PRIMARY, SUBQUERY, DERIVED, UNION, MATERIALIZED ...
table
- ํ ์ด๋ธ๋ช ํ์, ์๋ธ์ฟผ๋ฆฌ๋ ์์ ํ ์ด๋ธ ์ <subquery#>, <derived#> ๋ผ๊ณ ์ถ๋ ฅ
partitions
- ์คํ ๊ณํ์ ๋ถ๊ฐ ์ ๋ณด, ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋ ๋ ผ๋ฆฌ์ ์ธ ์์ญ
- ๋๋ฌด ๋ง์ ์์ญ์ ํํฐ์ ์ ์ ๊ทผํ๋ ๊ฒ์ผ๋ก ์ถ๋ ฅ๋๋ค๋ฉด ํํฐ์ ์ ์๋ฅผ ํ๋
type
- ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ์ฐพ์์ง์ ๊ดํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ํญ๋ชฉ
- system, const, eq_ref, ref, range, index, ALL ...
possible_keys
- ์ตํฐ๋ง์ด์ ๊ฐ SQL ๋ฌธ์ ์ต์ ํํ๊ณ ์ ์ฌ์ฉํ ์ ์๋ ์ธ๋ฑ์ค ๋ชฉ๋ก (์ค์ ๋ก๋ ๋ค๋ฅผ ์ ์์)
keys
- ์ตํฐ๋ง์ด์ ๊ฐ SQL ๋ฌธ์ ์ต์ ํํ๊ณ ์ ์ฌ์ฉํ ๊ธฐ๋ณธ ํค(PK) ๋๋ ์ธ๋ฑ์ค๋ช
- ๋นํจ์จ์ ์ธ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๊ฑฐ๋, ์ธ๋ฑ์ค ์์ฒด๋ฅผ ์ฌ์ฉํ์ง ์์๋ค๋ฉด SQL ํ๋ ๋์
key_len
- ์ฌ์ฉํ ์ธ๋ฑ์ค์ ๋ฐ์ดํธ ์
ref
- ํ ์ด๋ธ ์กฐ์ธ์ ์ํํ ๋ ์ด๋ค ์กฐ๊ฑด์ผ๋ก ํด๋น ํ ์ด๋ธ์ ์ก์ธ์ค ๋์๋์ง๋ฅผ ์๋ ค์ฃผ๋ ์ ๋ณด
rows
- SQL ๋ฌธ์ ์ํํ๊ณ ์ ์ ๊ทผํ๋ ๋ฐ์ดํฐ์ ๋ชจ๋ ํ(row) ์๋ฅผ ๋ํ๋ด๋ ์์ธก ํญ๋ชฉ
- ๋์คํฌ์์ ๋ฐ์ดํฐ ํ์ผ์ ์ฝ๊ณ ๋ฉ๋ชจ๋ฆฌ์์ ์ฒ๋ฆฌํด์ผ ํ ํ ์๋ฅผ ์์ํ๋ ๊ฐ (์ ํํ์ง ์์)
- SQL ๋ฌธ์ ์ต์ข ๊ฒฐ๊ณผ ๊ฑด์ ๋๋น rows์ ์ฐจ์ด๊ฐ ํด ๊ฒฝ์ฐ, ๋ถํ์ํ๊ฒ MySQL ์์ง๊น์ง ๋ฐ์ดํฐ๋ฅผ ๋ง์ด ๊ฐ์ ธ์๋ค๋ ๋ป์ด๋ฏ๋ก SQL ํ๋์ ๋์
filtered
- SQL ๋ฌธ์ ํตํด DB ์์ง์ผ๋ก ๊ฐ์ ธ์จ ๋ฐ์ดํฐ ๋์์ผ๋ก ํํฐ ์กฐ๊ฑด์ ๋ฐ๋ผ ์ด๋ ์ ๋์ ๋น์จ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๊ฑฐํ๋์ง๋ฅผ ์๋ฏธํ๋ ํญ๋ชฉ
- DB ์์ง์ผ๋ก 100๊ฑด์ ๋ฐ์ดํฐ ์กฐํ, ์ดํ WHERE ์ ์ผ๋ก 10๊ฑด ํํฐ๋ง ๋์๋ค๋ฉด, ๊ฐ์ 10(%)
extra
- SQL ๋ฌธ์ ์ด๋ป๊ฒ ์ํํ ๊ฒ์ธ์ง์ ๊ดํ ์ถ๊ฐ ์ ๋ณด๋ฅผ ๋ณด์ฌ์ฃผ๋ ํญ๋ชฉ
- Distinct, Using where, Using temporary, Using index, ...
์ด์์ผ๋ก ํ๋์ ํ์ํ ์ฉ์ด์ ์คํ ๊ณํ๋ค์ ๊ฐ๋ตํ ์ดํด๋ณด์๊ณ , ๋ด์ฉ์ด ๊ธธ์ด์ ธ ์ดํ ํฌ์คํ ์์ ์ค์ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ค์ํ ์ฟผ๋ฆฌ์ ๋ฌธ์ ์ ๋ค์ ๋ํด ํ๋ํ๋ฉฐ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค.
'CS > Database' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ ๋ฌด์ ๋ฐ๋ก ์ฐ๋ SQL ํ๋ 2 - SQL ํ๋ ์ค์ต (1) (0) | 2024.10.08 |
---|---|
MySQL EXPLAIN ์คํ๊ณํ ๋ง์คํฐํ๊ธฐ(feat. RealMySQL 8.0) (0) | 2023.01.07 |
[Spring Data MongoDB] - Auto Increment Sequence ์ด๊ธฐํํ๊ธฐ (0) | 2021.09.11 |
[Spring Data MongoDB] Auto-Increment Sequence ๋ง๋ค๊ธฐ (0) | 2021.09.10 |
[MySQL] - ํธ๋์ญ์ ์ ๊ฒฉ๋ฆฌ ์์ค(Isolation level) (11) | 2021.09.05 |
๋๊ธ