SQL ํ์ฑ ๋ถํ
๐ชก SQL ์ฒ๋ฆฌ ๊ณผ์
๊ณผ๊ฑฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ๋ก๊ทธ๋๋ฐ์ ํ ๋์๋, ์ฒ๋ฆฌ ์ ์ฐจ๋ฅผ ํ๋ก๊ทธ๋๋จธ๊ฐ ์ง์ ์์ฑ์ ํด์ผ ํ๋ค. ๊ทธ๋ฌ๋ ์ง๊ธ์ ๊ตฌ์กฐํ๋ ์ง์์ธ์ด(SQL) ์ ํตํด ์ฌ์ฉ์๊ฐ ์ํ๋ ๊ฒฐ๊ณผ์งํฉ์ ์ ์ํ๊ณ , ๊ทธ๊ฒ์ ์ป๋ ๋ฐ์ ํ์ํ ์ฒ๋ฆฌ์ ์ฐจ๋ฅผ ์ง์ ๊ธฐ์ ์ ํ์ง๋ ์๋๋ค.
๋์ ํ๋ก๊ทธ๋๋ฐ์ ํด์ฃผ๋ ์์ง์ด DBMS ๋ด์ ๋ด์ฅ์ด ๋์ด ์๊ธฐ ๋๋ฌธ์ด๋ฉฐ, SQL ์ตํฐ๋ง์ด์ ๊ฐ ๊ทธ ์ญํ ์ ์ํํ๋ค.
์ตํฐ๋ง์ด์ ์ ์ํด์ ์์ฑ๋ ์ฒ๋ฆฌ์ ์ฐจ๋ฅผ ์คํ๊ณํ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์ตํฐ๋ง์ด์ ์์๋ ์คํ ๊ณํ์ ์์ฑํ๊ณ , ํ๋ก์์ (๋๋ ์ฝ๋) ํํ๋ก ๋ณํํ๋ ๊ณผ์ ์ ๊ฑฐ์น ๋ค SQL ์์ง์ ์ํด ์ํ์ด ๋๋ค.
๐ฃSQL ํ์ฑ(Parsing)
์ฌ์ฉ์๊ฐ SQL์ ์คํํ๊ฒ ๋๋ฉด, ์ ์ผ ๋จผ์ SQL Parser๊ฐ SQL ๋ฌธ์ฅ์ ๋ฌธ๋ฒ์ ์ค๋ฅ๊ฐ ์๋์ง ๊ฒ์ฌํ๋ค.
๋ฌธ๋ฒ์ ์ผ๋ก ์ค๋ฅ๊ฐ ์์ผ๋ฉด ์๋ฏธ์ ์ค๋ฅ๊ฐ ์๋์ง๋ฅผ ๊ฒ์ฌํ๊ณ , ์ด๋ฐ ๊ฒ์ฌ ์ ์ฐจ๋ฅผ ๋ง์น๋ฉด ์ฌ์ฉ์๊ฐ ๋ฐํํ SQL๊ณผ ๊ทธ ์คํ ๊ณํ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์บ์์ ์บ์ฑ๋์๋์ง๋ฅผ ํ์ธํ๋ค. ๋ง์ฝ ์บ์ฑ๋์ด์๋ค๋ฉด, ๋ฌด๊ฑฐ์ด ์ต์ ํ ๊ณผ์ ์์ด ๊ณง๋ฐ๋ก ์คํ์ด ๊ฐ๋ฅํ๋ค
- ์ํํธ ํ์ฑ(Soft Parsing) : SQL๊ณผ ์คํ๊ณํ์ ์บ์์์ ์ฐพ์ ๊ณง๋ฐ๋ก ์คํ๋จ๊ณ๋ก ๋์ด๊ฐ
- ํ๋ ํ์ฑ(Hard Parsing) : SQL๊ณผ ์คํ๊ณํ์ ์บ์์์ ์ฐพ์ง ๋ชปํ๊ณ ์ต์ ํ ๊ณผ์ ์ ๊ฑฐ์น ๋ค ์คํ ๋จ๊ณ๋ก ๋์ด๊ฐ
๋ผ์ด๋ธ๋ฌ๋ฆฌ ์บ์๋ ํด์๊ตฌ์กฐ๋ก ๊ด๋ฆฌ๋ฅผ ํ๊ธฐ ๋๋ฌธ์, SQL๋ง๋ค ํด์ ๊ฐ์ ๋ฐ๋ผ ์ฌ๋ฌ ํด์ ๋ฒํท์ผ๋ก ๋๋์ด ์ ์ฅํ๋ค. SQL์ ์ฐพ์ ๋์๋ SQL ๋ฌธ์ฅ์ ํด์ ํจ์์ ์ ๋ ฅ, ๋ณํ๋ ํด์ ๊ฐ์ ์ด์ฉํด ํด๋น ํด์ ๋ฒํท์ ํ์ํ๋ฉด ๋๋ค.
๐ค SQL ์ต์ ํ(Optimization)
์ตํฐ๋ง์ด์ ๋ ์ฌ์ฉ์๊ฐ ์์ฒญํ SQL์ ๊ฐ์ฅ ๋น ๋ฅด๊ณ ํจ์จ์ ์ผ๋ก ์ํํ ์ต์ ๋น์ฉ์ ์ฒ๋ฆฌ๊ฒฝ๋ก๋ฅผ ์ ํํด์ฃผ๋ DBMS์ ํต์ฌ์์ง์ด๋ค.
์ตํฐ๋ง์ด์ ์ ์ต์ ํ ๊ณผ์ ์ ๊ฑฐ์น๋ ๊ฒ์ด ์์ ํ๋ ํ์ฑ์ธ๋ฐ, ๊ทธ ์ต์ ํ ๊ณผ์ ์ ๊ต์ฅํ ๋ฌด๊ฑฐ์ด ์์ ์ด๊ธฐ ๋๋ฌธ์ ์ตํฐ๋ง์ด์ ๊ฐ ์คํํ ์ต์ ํ ๊ณผ์ ์ ํตํด ์์ฑ๋ SQL ์คํ๊ณํ์ ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ์ฌ์ฌ์ฉํ ์ ์๋๋ก ๊ณต์ ๋ฉ๋ชจ๋ฆฌ์ ์บ์ฑํด๋๋ค.
โจSQL ์คํ ์ ์ฐจ
1. ๋ฌธ๋ฒ์ ์ค๋ฅ์ ์๋ฏธ์ ์ค๋ฅ๊ฐ ์๋์ง ๊ฒ์ฌ.
2. ํด์ ํจ์๋ก๋ถํฐ ๋ฐํ๋ ํด์ ๊ฐ์ผ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์บ์ ๋ด ํด์๋ฒํท์ ์ฐพ์๊ฐ.
3. ์ฐพ์๊ฐ ํด์๋ฒํท์ ์ฒด์ธ์ผ๋ก ์ฐ๊ฒฐ๋ ์ํธ๋ฆฌ๋ฅผ ์ฐจ๋ก๋ก ์ค์บํ๋ฉฐ ๊ฐ์ SQL ๋ฌธ์ฅ์ ์ฐพ์.
4. SQL ๋ฌธ์ฅ์ ์ฐพ์ผ๋ฉด ํจ๊ป ์ ์ฅ๋ ์คํ๊ณํ์ ๊ฐ์ง๊ณ ๋ฐ๋ก ์คํ.
5. ์ฐพ์๊ฐ ํด์๋ฒํท์์ SQL ๋ฌธ์ฅ์ ์ฐพ์ง ๋ชปํ๋ฉด ์ต์ ํ ์ํ.
6. ์ต์ ํ๋ฅผ ๊ฑฐ์น SQL๊ณผ ์คํ๊ณํ์ ๋ฐฉ๊ธ ํ์ํ ํด์๋ฒํท ์ฒด์ธ์ ์ฐ๊ฒฐ.
7. 6์์ ์ฐ๊ฒฐํ ์คํ๊ณํ์ ์คํ.
๐งถ ์บ์ฑ๋ SQL ๊ณต์
๐ฃ ์คํ๊ณํ ๊ณต์ ์กฐ๊ฑด
SQL ์ํ ์ ์ฐจ์์ ํ๋ ํ์ฑ์ ๋ฐ๋ณตํ์ง ์๊ณ , ์บ์ฑ๋์ด์๋ ๋ฒ์ ์ ์ฐพ์ ์ฌ์ฌ์ฉํ๊ธฐ ์ํด์๋ SQL์ ๋จผ์ ์ฐพ์์ผ ํ๋๋ฐ ์ฌ๊ธฐ์์ ์ฐพ๋ ๊ฒ์ 'SQL ๋ฌธ์ฅ' ์ด๋ค. ๊ฒฐ๊ตญ, ๋ฌธ์ฅ์ ํด์์ ํค๊ฐ์ผ๋ก ์ฌ์ฉํ๋ค๊ณ ๋ณผ ์ ์๋ค.
์ฆ, SQL ๋ฌธ์ฅ์์ ์์ ๊ณต๋ฐฑ ๋ฌธ์ ํ๋๋ง ์ถ๊ฐ๋๋๋ผ๋ ์๋ก ๋ค๋ฅธ ๋ฌธ์ฅ์ผ๋ก ์ธ์ํ๊ธฐ์ ์บ์ฑ๋ ๋ฒ์ ์ ์ฌ์ฉ ๋ถ๊ฐ๋ฅํ๊ฒ ๋๋ค.
๐ค ์คํ๊ณํ์ ๊ณต์ ํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ
์์ ์ธ๊ธํ๋ฏ ์์ ๊ณต๋ฐฑ ๋ฌธ์ ํ๋๋ง ์ถ๊ฐ๋์ด๋ ๋ค๋ฅธ ๋ฌธ์ฅ์ผ๋ก ์ธ์ํ๊ธฐ ๋๋ฌธ์, ์ตํฐ๋ง์ด์ ๋ ๊ณต๋ฐฑ, ๋์๋ฌธ์ ๊ตฌ๋ถ, ์ฃผ์ ๋ฑ์ ์์ฃผ ์์ ๋ณํ์๋ ๋ค๋ฅธ SQL๋ก ์ธ์ํด ๋ณ๋์ ์คํ๊ณํ์ ์๋ฆฝํ๊ฒ ๋๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋นํจ์จ์ ์ค์ด๊ณ ๊ณต์ ๊ฐ๋ฅํ ํํ๋ก SQL์ ์์ฑํ๊ธฐ ์ํด์๋ ๊ฐ๋ฐ ์ด๊ธฐ์ SQL ์์ฑ ํ์ค์ ์ ์ํ์ฌ ์ด๋ฅผ ์ค์ํ๋๋ก ํด์ผํ๋ค. ๋ณดํต ์์์ง์๋ฅผ ํตํด ๋์ค๋ ๊ฒ์ ์ํ๋น๋๊ฐ ๋ฎ๊ธฐ ๋๋ฌธ์ ๊ฑฑ์ ํ ๊ฒ์ด ์์ง๋ง, ์ฌ์ฉ์๊ฐ ์ง์ ์ ๋ ฅํ ๊ฐ์ ๊ณ์ํด์ ๋ค๋ฅธ SQL๋ก ์คํํ๋ ๊ฒฝ์ฐ๋ผ๋ฉด ๋ง์ด ๋ฌ๋ผ์ง๋ค.
๐น ๋ฐ์ธ๋ ๋ณ์ ์ฌ์ฉํ๊ธฐ
์ฌ์ฉ์ ๋ก๊ทธ์ธ์ ํ๋ค๊ณ ์๊ฐํด๋ณด์.
select *
from customer
where login_id = 'user';
select *
from customer
where login_id = 'user2';
์ด์ ๊ฐ์ ์์ผ๋ก ์์ฑํ๋ค๋ฉด, ์ตํฐ๋ง์ด์ ๋ ๋ก๊ทธ์ธ ์๋ง๋ค ์ด์ ๊ฐ์ ํ๋ก์์ ๋ฅผ ๊ณ์ํด์ ์์ฑํด๋ผ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋, ๊ทผ๋ณธ์ ์ผ๋ก ์ด๊ฒ์ ๋ด๋ถ ์ฒ๋ฆฌ ๋ฃจํด์ ๊ฐ๊ณ , where์ ๋ค์ด๊ฐ๋ ๋ฌธ์์ด๋ง ๋ฌ๋ผ์ง๋ ๊ฒ์ด๋ค. ๊ทธ๋ ๊ธฐ๋๋ฌธ์ ๊ฐ์ ํ๋ก์์ ๋ฅผ ๊ณ์ ์์ฑํ๋๋ก ํ๋ ๊ฒ๋ณด๋ค, login_id๋ฅผ ํผ๋ผ๋ฏธํฐ๋ก ๋ฐ์ ํ๋์ ํ๋ก์์ ๋ก ์ฒ๋ฆฌํ๊ฒ ํ๋ ๊ฒ์ด ์ณ๋ค.
์ด๊ฒ์ ์ํด SQL์ ์์ฑํ๋ ๋ฐฉ๋ฒ์ด ๊ณง ๋ฐ์ธ๋ ๋ณ์(Bind Variable)์ด๋ค. ๋ฐ์ธ๋ ๋ณ์๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด, ํ๋์ ํ๋ก์์ ๋ฅผ ๊ณต์ ํ๋ฉฐ ๋ฐ๋ณต ์ฌ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค.
select * from customer where login_id = :login_id;
์์ ๊ฐ์ด ๋ฐ์ธ๋ ๋ณ์๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด, ์ด๋ฅผ ์ฒ์ ์ํํ ๋ ํ๋ํ์ฑ์ ํตํด ์คํ๊ณํ์ ์์ฑํ๋ค. ์ดํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์บ์ฑํด๋๋ฉด์ ๋ฐ๋ณต์์ ์ ํ ๋ ๊ณ์ํด์ ์ฌ์ฌ์ฉํ ์ ์๋๋ก ํด์ค๋ค.
๋ฐ์ธ๋ ๋ณ์๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด ์ฌ์ฌ์ฉ์ ํ๊ฒ ๋๋ฏ๋ก ํ์ฑ ์์์๊ฐ๊ณผ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ค์ฌ์ค๋ค. ๊ฒฐ๊ตญ, ์์คํ ์ ๋ฐ์ CPU์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ฅ ์ ๋ฎ์ถฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์ฅ์ฑ์ ๋์ด๊ฒ ๋๋ค.
๊ทธ๋ฌ๋, ๋ฐ์ธ๋ ๋ณ์๊ฐ ์กด์ฌํจ์๋ ๋ถ๊ตฌํ๊ณ ๋ฆฌํฐ๋ด SQL ์์ฃผ๋ก ๊ฐ๋ฐ์ ํ๊ฒ ๋๋ค๋ฉด ์บ์ ๊ฒฝํฉ์ผ๋ก ์ธํด ์์คํ ์ ์ ์ ๊ฐ๋์ด ์ด๋ ค์ด ์ํฉ์ ๋์ด๊ฒ ๋ ์ ์๋๋ฐ, ์ด์ ๋๋นํ์ฌ DBMS๋ ์กฐ๊ฑด์ ๋น๊ต ๊ฐ์ด ๋ฆฌํฐ๋ด ์์์ผ ๋ ์ด๋ฅผ ์๋์ผ๋ก ๋ณ์ํ์ํค๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋๋ฐ, ๋ฌธ์ ๋ ์ด ์ต์ ์ ์ ์ฉํ๋ ์๊ฐ ์คํ๊ณํ์ด ๋ณ๊ฒฝ์ด ๋๊ธฐ ๋๋ฌธ์ ์๋ ์ด์ฉํ๋ SQL์ด ๋๋ ค์ง๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค. ๋ํ, ์๋์ ์ผ๋ก ์ฌ์ฉํ ์์์๋ ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๊ฐ๊ธ์ ๋ฐ์ธ๋ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
๐ฃ ๋ฐ์ธ๋ ๋ณ์ ์ฌ์ฉ ์ ์ฃผ์์ฌํญ
๋ฐ์ธ๋ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ฉด SQL์ด ์ต์ด ์ํ๋ ๋์ด๊ธฐ ๋๋ฌธ์ ์ตํฐ๋ง์ด์ ๋ ๊ท ์ผํ ๊ฐ์ด ๋ค์ด์ด์ ๊ฐ์ ํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์นผ๋ผ ๋ถํฌ๊ฐ ๊ท ์ผํ์ง ์์ ๋์ ์คํ ์์ ์ ๋ฐ์ธ๋ฉ๋๋ ๊ฐ์ ๋ฐ๋ผ ์ฟผ๋ฆฌ ์ฑ๋ฅ์ด ๋ค๋ฅด๊ฒ ๋ํ๋ ์ ์๋ค. ์ด๋ด ๋์๋ ๋ฐ์ธ๋ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค ์์ ๊ฐ์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋์ ์ ์๋ค.
๐ static SQL๊ณผ Dynamic SQL
๐ฃ Static SQL
StaticSQL์ Stringํ ๋ณ์์ ๋ด์ง ์๊ณ ์ฝ๋ ์ฌ์ด์ ์ง์ SQL๋ฌธ์ ๊ธฐ์ ํ ๊ฒ์ด๋ค. ์ฝ๋์ SQL๋ฌธ์ ์์ด์ ๊ธฐ์ ์ ํ๊ฒ ๋๋ฉด ์ปดํ์ผ์ ๊ฑฐ์น๋ฉด์ SQL์ ์คํํ๊ฒ ๋๋๋ฐ Static SQL์ ๊ฒฝ์ฐ์๋ ๋ฐํ์ ์์ ์ง์๋ฌธ์ด ๋ณ๊ฒฝ์ด ๋์ง ์๊ธฐ ๋๋ฌธ์ ๊ตฌ๋ฌธ ๋ถ์, ์ ํจ ์ค๋ธ์ ํธ ์ฌ๋ถ, ์ค๋ธ์ ํธ ์์ธ์ค ๊ถํ ๋ฑ์ ์ฒดํฌํ ์ ์๋ค.
๐ค Dynamic SQL
Dynamic SQL์ ๊ฒฝ์ฐ์๋ String ํ ๋ณ์์ ๋ด์์ SQL์ ์์ฑํ๋ค. ๋ณ์๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ SQL๋ฌธ์ ๋์ ์ผ๋ก ๋ณ๊ฒฝํ ์ ์๊ณ , ๋ฐํ์ ์์ ์ฌ์ฉ์์๊ฒ SQL์ ์ผ๋ถ ๋๋ ์ ์ฒด๋ฅผ ์ ๋ ฅ๋ฐ์ ์๋ ์๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ PreCompiler์์๋ ๋ด์ฉ์ ํ์ธํ์ง ์๊ณ DBMS์ ๋ฐ๋ก ์ ์กํ๊ณ , ๋ฐ๋ผ์ ์์์ ๊ฐ๋ฅํ ๊ตฌ๋ฌธ ๋ถ์, ์ ํจ ์ค๋ธ์ ํธ ์ฌ๋ถ, ์ค๋ธ์ ํธ ์์ธ์ค ๊ถํ ๋ฑ์ ์ฒดํฌํ ์ ์๋ค.