7.1 ์ง์๊ฐ ๋ํ๋๋ ์ด์
๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์๋ ๋ ๋ค๋ฅธ ์ค์ํ ๊ฒ์ ์ธ๋ฑ์ค์ ๋๋ค.
user ํ ์ด๋ธ์ ์ฒ๋ง ๋ช ์ ์ฌ์ฉ์๊ฐ ์๊ณ ๋ ๋ฒจ์ด 90 ์ด์์ธ ๋ชจ๋ ์ฌ์ฉ์๋ฅผ ํ์ํ๋ ค๋ ์ํฉ์ ์์ํด ๋ณด์ญ์์ค. ์ด ์ฟผ๋ฆฌ๋ ์์ฑํ๊ธฐ ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค.
SELECT * FROM user WHERE level > 90
1๋ถ๋ ์ ๋์ด ์์ฒญ์ ์์ฑํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ SQL ์๋ฒ์์ ์ด ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ ๋ฐ ์ผ๋ง๋ ๊ฑธ๋ฆฝ๋๊น? ๊ทธ๋ฐ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ ค๋ฉด 1000๋ง ๊ฐ์ ๋ ์ฝ๋๋ฅผ ๊ฑฐ์ณ์ผ ํ๊ณ ๋ ์ฝ๋๊ฐ ํ๋๋ง ์์ด๋ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆฐ๋ค.
Java์์ ์ ์ฌํ ์์ ์ ์ด๋ป๊ฒ ์ํํฉ๋๊น? ๋จผ์ ๋ ๋ฒจ๋ณ๋ก ์ฌ์ฉ์ ๋ชจ์์ ์ ๋ ฌํ ๋ค์ ์ด์ง ๊ฒ์์ ์ฌ์ฉํ์ฌ ํ์ํ ๋ ์ฝ๋๋ฅผ ๋งค์ฐ ๋น ๋ฅด๊ฒ ์ฐพ์ ์ ์์ต๋๋ค. ๋๋ ๊ทธ๊ฒ์ด ๋ฌด์์ธ์ง ์ค๋ช ํ ํ์๊ฐ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
์ข์ต๋๋ค. ํ์ง๋ง ์ด์ ๋ฑ๋ก ๋ ์ง๊ฐ 2020๋ ์ด์ ์ธ ์ฌ์ฉ์๋ฅผ ์ ํํด์ผ ํ๋ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น์? ๋ฑ๋ก ๋ ์ง๋ณ๋ก ๋ค์ ์ ๋ ฌํ๊ณ ์ด์ง ๊ฒ์์ ์ฌ์ฉํ์ญ์์ค.
์, ํ ๋ฒ์ด ์๋๋ผ ์์ฃผ ์ผ๋ถ ํ๋์ ๋ํด ํํฐ๋ฅผ ์ํํ๋ฉด ์ด ํ๋๋ณ๋ก ์ ๋ ฌ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ฒ์ด ๋งค์ฐ ์ ์ฉํ ๊ฒ์ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์๋ก ๋ค๋ฅธ ํ๋๋ก ๋์์ ์ ๋ ฌ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น?
๋๋ต์ ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค. ๋ฐ์ดํฐ ์์ฒด๊ฐ ์๋๋ผ ์ธ๋ฑ์ค๋ฅผ ์ผ๋ถ ์ ์ญ ํ ์ด๋ธ์ ์ ์ฅํด์ผ ํฉ๋๋ค.
id: ๋ฅผ ๊ฐ์ง 10๋ช
์ ์ฌ์ฉ์๊ฐ ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
.
๊ทธ๋ฆฌ๊ณ ๋ ๋ฒจ๋ณ๋ก ์ ๋ ฌํ๊ธฐ๋ก ๊ฒฐ์ ํ๋ฉด ID ๋ฐฐ์ด์ ์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ต๋๋ค {9, 2, 3, 1, 5, 4, 8, 6, 7, 10}
.
๋ ์ง์์ผ๋ก ์ ๋ ฌํ๋ฉด ์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ด ํ์๋ฉ๋๋ค {10, 1, 8, 7, 2, 3, 5, 9, 6}
.
์ด๋ฌํ ID์ ๋ฐฐ์ด์ indexes ๋ผ๊ณ ํฉ๋๋ค . ์์ ์์ฒด๋ ํฌ๋ฏ๋ก ๋ง์ง์ง ์์ต๋๋ค. Java์์๋ ๊ฐ์ฒด๋ฅผ ๊ฑด๋๋ฆฌ์ง ์๊ณ ํด๋น ์ฐธ์กฐ๋ฅผ ์ ์ฅํ์ง๋ง SQL์์๋ ์ค์ ๋ฌธ์์ด์ ๊ฑด๋๋ฆฌ์ง ์๊ณ ๋ฒํธ๋ฅผ ์ ์ฅํฉ๋๋ค.
์ด๊ฒ์ Java ์ฝ๋๋ก ๋ค์ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค.
List<String> list = List.of("A", "C", "B", "Z", "Cc", "Bb", "Zz", "Y"); //this is a list of objects
List<String> alphabeticsList = new ArrayList(list);
Collections.sort(alphabeticsList); //collection sorted alphabetically
List<String> lengthList = new ArrayList(list);
Collections.sort(lengthList, lengthComparator); //collection sorted by string length
์ปฌ๋ ์ ์ ๋ ฌ์ ์ค์ ์์๋ฅผ ์ด๋ํ๋ ๊ฒ์ ์๋ฏธํ์ง ์์ต๋๋ค. ์ปฌ๋ ์ ์ ์ค์ ๊ฐ์ฒด๋ฅผ ์ ์ฅํ์ง ์๊ณ ํด๋น ๊ฐ์ฒด์ ๋ํ ๋งํฌ๋ฅผ ์ ์ฅํฉ๋๋ค. SQL ํ ์ด๋ธ์ ๊ฒฝ์ฐ์๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค. ์ค์ ์ ์ค์ค๋ก์๊ฒ ๊ฑฐ์ง๋ง์ ํ๊ณ ๊ฑฐ์ง๋ง์ ํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ผ๋ถ ํ๋์ ๋ํด ์์ฃผ ์ ํํด์ผ ํ๋ ๊ฒฝ์ฐ ํ ์ด๋ธ์ ๋ค๋ฅธ ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํ๊ณ (Java์ ์ ์ปฌ๋ ์ ๊ณผ ์ ์ฌ) ํ ์ด๋ธ์ ํ์ ์ ๋ ฌํ๊ณ ์ ๋ ฌ๋ ์์๋ฅผ ํน์ ์ธ๋ฑ์ค ํ์ผ์ ์ ์ฅํฉ๋๋ค.
Java ๋น๊ต๊ฐ ์กฐ๊ธ์ด๋๋ง ๋์์ด ๋์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ์ฝ๊ฐ์ ์ฐ์ต - ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ์ฅ ํ์คํ ํด๊ฒฐ์ฑ ์ด ๋ ๊ฒ์ ๋๋ค.
7.2 ํ ์ด๋ธ์ ์ธ๋ฑ์ค ์ถ๊ฐ
์ธ๋ฑ์ค๋ ํ ์ด๋ธ์ ์์ฑํ๋ ๋์ ์ฆ์ ์ง์ ํ๊ฑฐ๋ ๋์ค์ ์ถ๊ฐํ ์ ์์ต๋๋ค. ๊ฐ์ฅ ์์ฃผ ๋ฐ์ํ๋ ๊ฒ์ ๋ ๋ฒ์งธ ์๋๋ฆฌ์ค์ ๋๋ค. ํ ์ด๋ธ ํฌ๊ธฐ๊ฐ ์ปค์ง๊ณ ๋ฐ์ดํฐ ์ํ๋ง์ด ๋๋ ค์ง๋ฉด ์ธ๋ฑ์ค๊ฐ ์ถ๊ฐ๋ฉ๋๋ค.
ํ ์ด๋ธ์ ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค.
ALTER TABLE table
ADD INDEX index_name (column);
๋์์ ์ฌ๋ฌ ์ด์ ๋ ์ฝ๋๋ฅผ ์์ฃผ ์กฐํํ๋ ๊ฒฝ์ฐ ๋ณตํฉ ์ธ๋ฑ์ค๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค. SQL์ ์ฌ๋ฌ ์ด์ ์ฌ์ฉํ์ฌ ๊ตฌ์ฑํฉ๋๋ค.
๋ณตํฉ ์ธ๋ฑ์ค๋ฅผ ํ ์ด๋ธ์ ์ถ๊ฐํ๋ ๊ฒ๋ ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค.
ALTER TABLE table
ADD INDEX index_name (column 1, column 2, column 3, ...);
์ธ๋ฑ์ค๋ ๋ง์ ๋์คํฌ ๊ณต๊ฐ์ ์ฐจ์งํ๋ฏ๋ก ์ธ๋ฑ์ค๊ฐ ๋ ์ด์ ํ์ํ์ง ์์ผ๋ฉด ์ธ์ ๋ ์ง ์ ๊ฑฐํ ์ ์์ต๋๋ค.
ALTER TABLE table
DROP INDEX index_name;
์ธ๋ฑ์ค ์์ฒด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์จ๊ฒจ์ง ๋ถ๋ถ์ ๋๋ค. ์ด๋ค ์์ผ๋ก๋ ์ฟผ๋ฆฌ ์์ฑ ํ์์ ์ํฅ์ ์ฃผ์ง ์์ต๋๋ค. ๊ทธ๋ค์ ์กด์ฌ๊ฐ ๋ฐ์ดํฐ ์ํ๋ง ์๋๋ฅผ ๋์ด๊ณ ์ถ๊ฐ ๋ฐ ๋ฐฑ์ ์๋๋ฅผ ๋ฆ์ถ๋ ๊ฒ์ ๋๋ค.
๊ทธ๋ฌ๋ ์ค๋๋ ์ธ๊ณ์์ ์๋๊ฐ ์ผ๋ง๋ ์ค์ํ์ง์ ๋์คํฌ ๊ณต๊ฐ์ด ์ผ๋ง๋ ์ ๋ ดํ์ง๋ฅผ ๊ณ ๋ คํ๋ฉด ๋ชจ๋ ๊ฒฝ์ฐ์ ์ธ๋ฑ์ค๋ฅผ ์์ ๋กญ๊ฒ ์ถ๊ฐํ ์ ์์ต๋๋ค. ๊ด๋ฆฌ์๋ ์ฃ์กํฉ๋๋ค...