์ธ๋ฑ์ฑ ์๊ณ ๋ฆฌ์ฆ ์ค ๊ฐ์ฅ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ์๊ณ ๋ฆฌ์ฆ. B๋ Binary์ ์ฝ์๊ฐ ์๋, Balanced์ ์ฝ์์ด๋ค.
8.3.1 ๊ตฌ์กฐ ๋ฐ ํน์ฑ
B-Tree์ ๊ตฌ์กฐ
- ์ ์ผ ์๋จ์ ์๋ ๋ฃจํธ ๋
ธ๋, ์ค๊ฐ์ ์๋ ๋ธ๋์น ๋
ธ๋, ๊ฐ์ฅ ๋ง์ง๋ง์ ์๋ ๋ฆฌํ ๋
ธ๋๊ฐ ์๋ค.
- ๋ฆฌํ ๋ ธ๋๋ ํญ์ ์ค์ ๋ฐ์ดํฐ ๋ ์ฝ๋๋ฅผ ์ฐพ์๊ฐ๊ธฐ ์ํ ์ฃผ์๊ฐ์ ๊ฐ์ง๊ณ ์๋ค.
- ์ธ๋ฑ์ค๋ค์ ๋ชจ๋ ์ ๋ ฌ์ด ๋ ์ํ๋ก ์ ์ฅ์ด ๋์ด ์๋ค.
- ์ค์ ๋์คํฌ์ ์ ์ฅ๋ ๋ฐ์ดํฐ ํ์ผ์ ๋ ์ฝ๋๋ ์ ๋ ฌ๋์ด์์ง ์๋ค.
- ์๋ฐํ ๋งํ๋ฉด, InnoDB์์๋ ๋ ์ฝ๋๊ฐ ํด๋ฌ์คํฐ๋์ด ์ ์ฅ๋๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ณธ์ ์ผ๋ก PK ์์๋ก ์ ๋ ฌ๋์ด ์ ์ฅ๋๋ค.
๋ฐ์ดํฐ ๋ ์ฝ๋ ๊ตฌ์กฐ (InnoDB)
๋ฆฌํ ๋ ธ๋์ ๋ฐ์ดํฐ ํ์ผ์ ๊ตฌ์กฐ๋ฅผ ์์ธํ๊ฒ ์ดํด๋ณด์.
๋ฐ์ดํฐ ํ์ผ์๋ ๊ฒฐ๊ตญ PK๋ฅผ ์ ์ฅํ๊ณ ์๋ B-Tree๊ฐ ์๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ธ๋ฑ์ค๋ฅผ ์ด์ฉํด ๋ฆฌํ๋ ธ๋๋ฅผ ์ฐพ์ ๋ค์ PK๊ฐ ์ ์ฅ๋ B-Tree ํ์์ ๋ ํด์ผ ํ๋ค.
8.3.2 B-Tree ์ธ๋ฑ์ค ํค ์ถ๊ฐ ๋ฐ ์ญ์
8.3.2.1 ์ธ๋ฑ์ค ํค ์ถ๊ฐ
- B-Tree์ ์ ์ฅ๋ ๋๋ ์ ์ฅ๋ ํค ๊ฐ์ ์ด์ฉํด B-Tree์์ ์ ์ ํ ์์น๋ฅผ ๊ฒ์ํด์ผ ํ๋ค.
- ์ ์ฅ๋ ์์น๊ฐ ๊ฒฐ์ ๋๋ฉด ๋ ์ฝ๋์ ํค ๊ฐ๊ณผ ๋์ ๋ ์ฝ๋์ ์ฃผ์ ์ ๋ณด๋ฅผ B-Tree์ ๋ฆฌํ ๋ ธ๋์ ์ ์ฅํ๋ค.
- ๋ง์ฝ, ๋ฆฌํ ๋
ธ๋๊ฐ ๊ฝ ์ฐจ ๋๋ ์ ์ฅํ ์ ์๋ ๊ฒฝ์ฐ์๋ ๋ฆฌํ ๋
ธ๋๋ฅผ ๋ถ๋ฆฌํ๋ ์์
์ ํด์ผ ํ๋ค.
- ์ด ์์ ์ ์์ ๋ ธ๋์๊น์ง ์ํฅ์ ๋ฏธ์น๋ค. ์ด ๋๋ฌธ์ ์ฐ๊ธฐ ์์ ์๋ ๋น์ฉ์ด ๋ง์ด ๋ ๋ค.
InnoDB ์คํ ๋ฆฌ์ง ์์ง์ ํค ์ถ๊ฐ ์์ ์ ์ง์ฐ์์ผ ๋์ค์ ์ฒ๋ฆฌํ ์ ์๋ค. ํ์ง๋ง PK, ์ ๋ํฌ ์ธ๋ฑ์ค์ ๊ฒฝ์ฐ ์ค๋ณต ์ฒดํฌ๊ฐ ํ์ํ๊ธฐ ๋๋ฌธ์ ์ฆ์ ์ฒ๋ฆฌ ๋๋ค. (์ฒด์ธ์ง ๋ฒํผ๋ฅผ ์ด์ฉํด ์ง์ฐ์์ ์ ์ฒ๋ฆฌํ๋ค.)
8.3.2.2 ์ธ๋ฑ์ค ํค ์ญ์
์ญ์ ํ ํค ๊ฐ์ด ์ ์ฅ๋ ๋ฆฌํ ๋ ธ๋๋ฅผ ์ฐพ์ ์ญ์ ๋งํฌ๋ง ํ๋ฉด ์์ ์ด ๋๋๋ค. ์ญ์ ๋งํน๋ ์ธ๋ฑ์ค ํค ๊ณต๊ฐ์ ๊ทธ๋๋ก ๋ฐฉ์น ๋๊ฑฐ๋ ์ฌํ์ฉํ ์ ์๋ค. ๋งํน ์์ ๋ํ ๋์คํฌ ์ฐ๊ธฐ๊ฐ ํ์ํ๋ค. InnoDB ์คํ ๋ฆฌ์ง ์์ง์์๋ ์ด ์์ ์ด ๋ฒํผ๋ง๋์ด ์ง์ฐ ์ฒ๋ฆฌ๋ ์๋ ์๋ค.
8.3.2.3 ์ธ๋ฑ์ค ํค ๋ณ๊ฒฝ
์ธ๋ฑ์ค ํค ๊ฐ์ ๋ฐ๋ผ ์ ์ฅ๋๋ ๋ฆฌํ ๋
ธ๋์ ์์น๊ฐ ๊ฒฐ์ ๋๋ฏ๋ก ๋จ์ํ๊ฒ ๋ณ๊ฒฝํ ์ ์๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ 1. ๋จผ์ ํค๋ฅผ ์ญ์ ํ ๋ค
โ 2. ์๋กญ๊ฒ ์ถ๊ฐ๋ฅผ ํ๋ค
์ด ์์ ์ญ์ InnoDB ์คํ ๋ฆฌ์ง ์์ง์ด ์ฒด์ธ์ง ๋ฒํผ๋ฅผ ํ์ฉํด ์ง์ฐ ์ฒ๋ฆฌ๋ ์ ์๋ค.
8.3.2.4 ์ธ๋ฑ์ค ํค ๊ฒ์
์ธ๋ฑ์ค๋ ์กฐํ๋ฅผ ๋น ๋ฅด๊ฒ ํ๊ธฐ ์ํ ๋ชฉ์ ์ด๋ค. ํ์ง๋ง ์ฃผ์๋ฅผ ํด์ผ ํ ์ ๋ค์ด ์๋ค.
- LIKE ์กฐ๊ฑด์ผ ๊ฒฝ์ฐ โA%โ ๊ฒฝ์ฐ๋ ๊ฐ๋ฅํ๋, โ%Bโ์ ๊ฒฝ์ฐ๋ ๋ถ๊ฐ๋ฅ ํ๋ค.
- 100% ์ผ์น ์กฐ๊ฑด์ ๊ฐ๋ฅ
- ๋ถ๋ฑํธ(<, >) ์กฐ๊ฑด ๊ฐ๋ฅ
- ํค ๊ฐ์ด ๋ณํ๋๋ฉด ๋ถ๊ฐ๋ฅ
- ex)
where substr(name, 1) = โAโ
- ex)
์ธ๋ฑ์ค ์ค๊ณ๊ฐ ์ค์ํ ๋ ๋ค๋ฅธ ์ด์ ๋ InnoDB ์คํ ๋ฆฌ์ง ์์ง์์์ ๋ ์ฝ๋ ์ ๊ธ์ ๊ฒฐ๊ตญ ์ธ๋ฑ์ค ๋ ์ฝ๋๋ฅผ ๋จผ์ ์ ๊ทผ ํ ํ ์ด๋ธ์ ๋ ์ฝ๋๋ฅผ ์ ๊ทธ๋ ๋ฐฉ์์ด๊ธฐ ๋๋ฌธ์, ์ต๋ํ ์ ์ ๋ ์ฝ๋๋ฅผ ์ ๊ทธ๋๋ก ํด์ผ ํ๋ค.
8.3.3 B-Tree ์ธ๋ฑ์ค ์ฌ์ฉ์ ์ํฅ์ ๋ฏธ์น๋ ์์
1. ์ธ๋ฑ์ค ํค ๊ฐ์ ํฌ๊ธฐ
๋์คํฌ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ฐ์ฅ ๊ธฐ๋ณธ ๋จ์๋ฅผ ํ์ด์ง
๋ผ๊ณ ํ๋ค.
B-Tree๋ ์์ ๋
ธ๋์ ๊ฐ์๋ ๊ฐ๋ณ์ ์ด๋ค. ํ์ด์ง ํฌ๊ธฐ์ ํค ๊ฐ์ ํฌ๊ธฐ์ ๋ฐ๋ผ ๊ฒฐ์ ๋๋๋ฐ, MySQL์ ํ์ด์ง ํฌ๊ธฐ ๊ธฐ๋ณธ๊ฐ์ด 16KB์ด๊ณ ์์ ๋
ธ๋ ์ฃผ์ ์์ญ์ด ๋๋ต 12๋ฐ์ดํธ๋ผ๊ณ ๊ฐ์ ํ๋ฉด ํ๋์ ์ธ๋ฑ์ค ํ์ด์ง(16KB)์ 16*1024/(16+12) = 585
๊ฐ๋ฅผ ์ ์ฅํ ์ ์๋ค. ์ต์ข
์ ์ผ๋ก ์์ ๋
ธ๋๋ฅผ 585๊ฐ ๊ฐ์ง ์ ์๋ B-Tree๊ฐ ๋๋ ๊ฒ์ด๋ค.
๋ง์ฝ ์ธ๋ฑ์ค ํค ๊ฐ์ด 32๋ฐ์ดํธ๋ก ๋์ด๋ฌ๋ค๋ฉด, 16*1024/(16+32) = 372
๊ฐ ์ ์ฅํ ์ ์๋ค.
์ด๊ฒ ์ ์ค์ํ๋๋ฉด, SELECT๋ก 500๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํด์ผ ํ๋ค๋ฉด, ์ธ๋ฑ์ค ํค ๊ฐ์ด 16 ๋ฐ์ดํธ์๋ค๋ฉด 1๊ฐ์ ํ์ด์ง๋ง ์ฝ์ผ๋ฉด ๋๋๋ฐ, 32๋ฐ์ดํธ์๋ค๋ฉด ์ต์ 2๊ฐ ์ด์ ํ์ด์ง๋ฅผ ์ฝ์ด์ผ ํ๋ ๊ฒ์ด๋ค.
ํ์ด์ง๋ฅผ ์ฝ๋ ๋ค๋ ๊ฒ์ ๊ฒฐ๊ตญ ๋์คํฌ I/O๊ฐ ๋ฐ์ํ๋ ๊ฒ์ด๊ณ ์ด๋ ์๋๊ฐ ๋๋ ค์ง๋ค๋ ์๋ฏธ์ด๋ค.
2. B-Tree ๊ธธ์ด
B-Tree ๊น์ด๊ฐ 3์ธ ๊ฒฝ์ฐ ๊ฐ์ง๋ ํค ๊ฐ์ ์ด ๊ฐ์
- ์ธ๋ฑ์ค ํค ๊ฐ์ด 16๋ฐ์ดํธ์ผ ๋: ์ต๋ 2์ต (585 * 585 * 585)
- ์ธ๋ฑ์ค ํค ๊ฐ์ด 32๋ฐ์ดํธ์ผ ๋: 5์ฒ๋ง (372 * 372 * 372)
์ธ๋ฑ์ค ํค ๊ฐ์ด ์ปค์ง๋ฉด ํธ๋ฆฌ ๊น์ด๊ฐ ๊น์ด์ง ๊ฒ์ด๊ณ ์ด๋ ์ฑ๋ฅ๊ณผ ์ง๊ฒฐ๋๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก, ์ธ๋ฑ์ค ํค ๊ฐ์ ํฌ๊ธฐ๋ ๊ฐ๋ฅํ๋ฉด ์๊ฒ ๋ง๋๋ ๊ฒ์ด ์ข๋ค.
3. ์ ํ๋ (๊ธฐ์์ฑ)
๋ชจ๋ ์ธ๋ฑ์ค ํค ๊ฐ ๊ฐ์ด๋ฐ ์ ๋ํฌํ ๊ฐ์ ์๋ฅผ ์๋ฏธํ๋ค. ์ ์ฒด ์ธ๋ฑ์ค ํค ๊ฐ์ 100๊ฐ์ธ๋ฐ, ๊ทธ ์ค ์ ๋ํฌํ ๊ฐ์ ์๊ฐ 10๊ฐ๋ผ๋ฉด ๊ธฐ์์ฑ์ 10์ด๋ค. ์ ํ๋๊ฐ ๋์์๋ก ๊ฒ์ ๋์์ด ์ค์ด๋ค๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ์ ๋์์ด ๋๋ค.
์์๋ฅผ ํตํด ์์๋ณด์
์ ์ฒด ๋ ์ฝ๋ ์๋ 1๋ง ๊ฑด์ด๊ณ , country ์ปฌ๋ผ์ผ๋ก๋ง ์ธ๋ฑ์ค๊ฐ ์์ฑ๋์ด์๋ค.
ํ ์คํธ 1:
- ์ผ์ด์ค A: country ์ปฌ๋ผ์ ์ ๋ํฌํ ๊ฐ์ ๊ฐ์(๊ธฐ์์ฑ)๊ฐ 10๊ฐ
- ์ผ์ด์ค B: country ์ปฌ๋ผ์ ์ ๋ํฌํ ๊ฐ์ ๊ฐ์(๊ธฐ์์ฑ)๊ฐ 1,000๊ฐ
select * from test where country='korea' and city='seoul';
MySQL์์๋ ์ธ๋ฑ์ค์ ํต๊ณ ์ ๋ณด(์ ๋ํฌํ ๊ฐ์ ๊ฐ์)๊ฐ ๊ด๋ฆฌ๋๊ธฐ ๋๋ฌธ์ city ์ปฌ๋ผ์ ๊ธฐ์์ฑ์ ์์ ๋ฒ์์ ์๋ฌด๋ฐ ์ํฅ์ ๋ฏธ์น์ง ๋ชปํ๋ค. ์ ์ฟผ๋ฆฌ๋ ์ผ์ด์ค A์ ๊ฒฝ์ฐ ํ๊ท 1,000๊ฑด, B์ ๊ฒฝ์ฐ ํ๊ท 10๊ฑด์ด ์กฐํ๋ ์ ์๋ค๋ ๊ฒ์ ์์ธกํ ์ ์๋ค.
๋ง์ฝ ํด๋น๋๋ ๊ฒฐ๊ณผ ๋ ์ฝ๋๊ฐ 1๊ฑด๋ง ์กด์ฌํ๋ค๋ฉด, ์ผ์ด์ค A๋ 1๊ฑด์ ๋ฐ์ดํฐ๋ฅผ ์ํด ์ธ๋ชจ์๋ 999๊ฑด์ ๋ ์ฝ๋๋ฅผ ๋ ์ฝ์์ง๋ง, ์ผ์ด์ค B๋ 9๊ฑด๋ง ๋ ์ฝ์ ๊ฒ ์ด๋ค.
4. ์ฝ์ด์ผ ํ๋ ๋ ์ฝ๋์ ๊ฑด์
๋ ์ฝ๋๊ฐ 100๋ง ๊ฑด์ด ์๋๋ฐ 50๋ง ๊ฑด์ ์ฝ์ด์ผ ํ๋ค๊ณ ํด๋ณด์. ์ธ๋ฑ์ค๋ฅผ ์ด์ฉํ ์ฝ๊ธฐ์ ์์ต ๋ถ๊ธฐ์ ์ด ์ผ๋ง์ธ์ง ํ๋จํ ํ์๊ฐ ์๋๋ฐ, ์ผ๋ฐ์ ์ธ DBMS์ ์ตํฐ๋ง์ด์ ์์๋ ์ธ๋ฑ์ค๋ฅผ ํตํด ๋ ์ฝ๋ 1๊ฑด์ ์ฝ๋ ๊ฒ์ด ํ
์ด๋ธ์์ ์ง์ ๋ ์ฝ๋ 1๊ฑด์ ์ฝ๋ ๊ฒ๋ณด๋ค 45๋ฐฐ ์ ๋ ๋น์ฉ์ด ๋ ๋ค๊ณ ์์ธกํ๋ค. ์ฆ ์ฝ์ด์ผ ํ๋ ๋ ์ฝ๋๊ฐ ์ ์ฒด ๋ ์ฝ๋์ 2025%๋ฅผ ๋์ด์๋ฉด ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์ง์ ํ
์ด๋ธ์ ์ฝ๋๋ค.
๊ฐ์ ๋ก ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋๋ก ํํธ๋ฅผ ์ถ๊ฐํด๋ ์ตํฐ๋ง์ด์ ๊ฐ ์ด๋ฅผ ๋ฌด์ํ๊ณ ํ ์ด๋ธ์ ์ง์ ์ฝ์ด ๋ค์ด๋ฏ๋ก ์ฃผ์ํด์ผ ํ๋ค.
8.3.4 B-Tree ์ธ๋ฑ์ค๋ฅผ ํตํ ๋ฐ์ดํฐ ์ฝ๊ธฐ
8.3.4.1 ์ธ๋ฑ์ค ๋ ์ธ์ง ์ค์บ
์ธ๋ฑ์ค์ ์ ๊ทผ ๋ฐฉ๋ฒ ๊ฐ์ด๋ฐ ๊ฐ์ฅ ๋ํ์ ์ธ ์ ๊ทผ ๋ฐฉ์์ด๋ค.
select * from test where first_name between 'Ebbe' and 'Gad';
์ธ๋ฑ์ค ๋ ์ธ์ง ์ค์บ์ ์ธ๋ฑ์ค์ ๋ฒ์๊ฐ ๊ฒฐ์ ๋์ ๋ ์ฌ์ฉํ๋ ๋ฐฉ์์ด๋ค.
- ๋ฃจํธ ๋ ธ๋์์๋ถํฐ ๋น๊ตํด ๋ธ๋์น ๋ ธ๋๋ฅผ ๊ฑฐ์น๊ณ ์ต์ข ์ ์ผ๋ก ๋ฆฌํ ๋ ธ๋๊น์ง ๋๋ฌํด์ผ ํ์ํ ๋ ์ฝ๋์ ์์ ์ง์ ์ ์ ์ ์๋ค. (์ธ๋ฑ์ค ํ์)
- ์์ํด์ผ ํ ์์น๋ฅผ ์ฐพ์๋ค๋ฉด, ๊ทธ๋๋ถํฐ ๋ฆฌํ ๋
ธ๋์ ๋ ์ฝ๋๋ง ์์๋๋ก ์ฝ์ผ๋ฉด ๋๋ค. (์ธ๋ฑ์ค ์ค์บ(์ธ๋ฑ์ค ํ์์ด ํฌํจ๋ ์ ์์)
- ๋ด๋ฆผ์ฐจ์, ์ค๋ฆ์ฐจ์์ ๋ฐ๋ผ ์ ์ ๋๋ ์ญ์์ผ๋ก ์ฝ์ ์ ๋ ์๋ค.
- ๋ง์ฝ ์ค์บํ๋ค๊ฐ ๋ฆฌํ ๋ ธ๋์ ๋๊น์ง ์ฝ์ผ๋ฉด ๋ฆฌํ ๋ ธ๋ ๊ฐ ๋งํฌ๋ฅผ ์ด์ฉํด ๋ค์ ๋ฆฌํ ๋ ธ๋๋ฅผ ์ฐพ์ ๋ค์ ์ค์บํ๋ค.
- ์ต์ข ์ ์ผ๋ก ๋ฉ์ถฐ์ผ ํ ์์น์ ๋๋ฌํ๋ฉด ์ง๊ธ๊น์ง ์ค์บํ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ๋ค.
๋ง์ฝ ์กฐํํ๋ ์ปฌ๋ผ์ด ์ธ๋ฑ์ค๋ฅผ ์ด์ฉํด ๊ตณ์ด ๋ฐ์ดํฐ ํ์ผ์ ์กฐํํ์ง ์์๋ ๋๋ ๊ฒฝ์ฐ๋ฅผ ์ปค๋ฒ๋ง ์ธ๋ฑ์ค
์ด๋ผ๊ณ ํ๋ค.
8.3.4.2 ์ธ๋ฑ์ค ํ ์ค์บ
์ธ๋ฑ์ค๋ฅผ ์ฒ์๋ถํฐ ๋๊น์ง ๋ชจ๋ ์ฝ๋ ๋ฐฉ์์ ์๋ฏธํ๋ค.
์ธ๋ฑ์ค ๊ตฌ์ฑ : (first_name, last_name)
select * from test where last_name like '%B';
์ฟผ๋ฆฌ์ ์กฐ๊ฑด์ ์ ์ฌ์ฉ๋ ์ปฌ๋ผ์ด ์ธ๋ฑ์ค์ ์ฒซ ๋ฒ์งธ ์ปฌ๋ผ์ด ์๋ ๊ฒฝ์ฐ ์ธ๋ฑ์ค ํ ์ค์บ ๋ฐฉ์์ด ์ฌ์ฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ธ๋ฑ์ค๋ (A, B, C)์ ์์๋ก ๋ง๋ค์ด์ก์ง๋ง ์ฟผ๋ฆฌ์ ์กฐ๊ฑด์ ์ B ์ปฌ๋ผ์ด๋ C ์ปฌ๋ผ์ผ๋ก ๊ฒ์ํ๋ ๊ฒฝ์ฐ์ด๋ค.
- ์ฟผ๋ฆฌ๊ฐ ์ธ๋ฑ์ค์ ๋ช ์๋ ์ปฌ๋ผ๋ง์ผ๋ก ์กฐ๊ฑด์ ์ฒ๋ฆฌํ ์ ์๋ ๊ฒฝ์ฐ ์ฃผ๋ก ์ด ๋ฐฉ์์ด ์ฌ์ฉ๋๋ค.
- ์ธ๋ฑ์ค์ ํฌ๊ธฐ๋ ํ ์ด๋ธ์ ํฌ๊ธฐ๋ณด๋ค ์์ผ๋ฏ๋ก ํ ์ด๋ธ ํ ์ค์บ๋ณด๋ค๋ ํจ์จ์ ์ด๋ค.
8.3.4.3 ๋ฃจ์ค ์ธ๋ฑ์ค ์ค์บ
๋ฃจ์ค ์ธ๋ฑ์ค ์ค์บ์ ์ธ๋ฑ์ค ๋ ์ธ์ง ์ค์บ๊ณผ ๋น์ทํ๊ฒ ์๋ํ์ง๋ง, ์ค๊ฐ์ ํ์ํ์ง ์๋ ์ธ๋ฑ์ค ํค ๊ฐ์ ๊ฑด๋๋ฐ๋ฉด์ ์ค์บํ๋ค. ์ผ๋ฐ์ ์ผ๋ก GROUP BY ๋๋ ์งํฉ ํจ์ ๊ฐ์ด๋ฐ MAX(), MIN() ํจ์์ ๋ํด ์ต์ ํ๋ฅผ ํ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉ๋๋ค.
์๋ฅผ ๋ค์ด, (dept_no, emp_no)
์กฐํฉ์ผ๋ก ์ธ๋ฑ์ค๊ฐ ๊ตฌ์ฑ๋์ด ์๋ค๊ณ ๊ฐ์ ํด๋ณด์.
- ์ด๋ dept_no, emp_no ์กฐํฉ์ผ๋ก ์ ๋ ฌ์ด ๋์ด์๋ค๋ ์๋ฏธ์ด๋ค.
select dept_no, MIN(emp_no)
from dept_emp
where dept_no between 'd002' and 'd004'
group by dept_no;
์ ์ฟผ๋ฆฌ๋ depth_no ๊ทธ๋ฃน ๋ณ๋ก ์ ์ผ ์ฒซ ๋ฒ์งธ ๋ ์ฝ๋๋ง ์ฝ์ผ๋ฉด ๋๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ด ์ค์บํ๊ฒ ๋๋ค.
+---------------------+
| dept_no | emp_no |
**| d002 | 100000 | <- ์ค์บ**
| d002 | 103401 | -- ์ฌ๊ธฐ์ ๋ถํฐ d002๋ผ๋ฉด ๋ชจ๋ ์คํต!
| .... | ...... |
+---------------------+
...
+---------------------+
| dept_no | emp_no |
**| d004 | 200000 | <- ์ค์บ**
| d004 | 203401 | -- ์ฌ๊ธฐ์ ๋ถํฐ d004๋ ๋ชจ๋ ์คํต!
| d004 | 203432 |
| .... | ...... |
+---------------------+
8.3.4.4 ์ธ๋ฑ์ค ์คํต ์ค์บ
์ธ๋ฑ์ค์ ๊ตฌ์ฑ์ด ์ค์ํ ์ด์ ๋ ํด๋น ํค ๊ฐ์ ์์๋๋ก ์ ๋ ฌ์ด ๋์ด์๊ธฐ ๋๋ฌธ์ด๋ค.
์๋ ์์๋ฅผ ๋ณด์. ์ธ๋ฑ์ค๋ (col1, col2)๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
select * from test where col2='b'; // X
select * from test where col1='a' and col2='b'; // O
col2 ๋จ๋ ์ผ๋ก ์ฌ์ฉํ๋ ์ฟผ๋ฆฌ๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ง ๋ชปํ ๋ฟ๋๋ฌ, ์ด๋ฐ ๊ฒฝ์ฐ์๋ ์๋ก ์์ฑ์ ํด์ผ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ์ ์์๋ค.
ํ์ง๋ง, 8.0 ๋ถํฐ๋ ์ตํฐ๋ง์ด์ ๊ฐ col1 ์ปฌ๋ผ์ ๊ฑด๋๋ฐ์ด col2 ์ปฌ๋ผ๋ง์ผ๋ก๋ ์ธ๋ฑ์ค ๊ฒ์์ด ๊ฐ๋ฅํ๊ฒ ํด์ฃผ๋ ์ธ๋ฑ์ค ์คํต ์ค์บ
์ต์ ํ ๊ธฐ๋ฅ์ด ๋์
๋๋ค.
๋ฌผ๋ก ์ด์ ๋ฒ์ ์์๋ ์ธ๋ฑ์ค ์คํต ์ค์บ๊ณผ ๋น์ทํ ๋ฃจ์ค ์ธ๋ฑ์ค ์ค์บ๋ ์์์ง๋ง ๋ฃจ์ค ์ธ๋ฑ์ค ์ค์บ์ GROUP BY ์์ ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ง ์ ์ฉํ ์ ์์๋ค. ํ์ง๋ง 8.0 ๋ถํฐ ๋์ ๋ ์ธ๋ฑ์ค ์คํต ์ค์บ์ WHERE ์ ๊น์ง ์ ์ฉํ ์ ์๋๋ก ์ฉ๋๊ฐ ํ์ฅ๋์๋ค.
์ธ๋ฑ์ค ์คํต ์ค์บ์ ๋จ์ ์ด ์๋ค.
- WHERE ์กฐ๊ฑด์ ์ ์กฐ๊ฑด์ด ์๋ ์ธ๋ฑ์ค์ ์ ํ ์ปฌ๋ผ์ ์ ๋ํฌํ ๊ฐ์ ๊ฐ์๊ฐ ์ ์ด์ผ ํ๋ค.
- ๋ง์ฝ ์ ํ ์ปฌ๋ผ์ด ์ฌ์๋ฒํธ ์ฒ๋ผ ์ ๋ํฌํ ๊ฐ์ด๋ผ๊ณ ํ๋ค๋ฉด ๋ชจ๋ ์ฌ์ ์ ๋งํผ ๋ ์ธ์ง ์ค์บ ์์ ์ง์ ์ ๊ฒ์ํ๋ ์์ ์ด ํ์ํด ์ฑ๋ฅ์ด ๋จ์ด์ง๋ค.
- ์ฟผ๋ฆฌ๊ฐ ์ธ๋ฑ์ค์ ์กด์ฌํ๋ ์ปฌ๋ผ๋ง์ผ๋ก ์ฒ๋ฆฌ ๊ฐ๋ฅํด์ผ ํจ(์ปค๋ฒ๋ง ์ธ๋ฑ์ค)
- ๋ชจ๋ ์ปฌ๋ผ์ ์กฐํํ๋๋ก ๋ณ๊ฒฝํ๋ค๋ฉด, ์ด๋ ๋๋จธ์ง ์ปฌ๋ผ์ ์กฐํํ๊ธฐ ์ํด ํ ํ ์ด๋ธ ์ค์บ์ผ๋ก ์คํ๊ณํ์ ์๋ฆฝํ๋ค.