์กฐ์ํ๋์ ์น์ ํ SQL ํ๋์ ์ฝ๊ณ ๊ฐ์ธ์ ์ผ๋ก ๊ณต๋ถํ ๋ด์ฉ์ ์ ๋ฆฌํ ๊ธ์ ๋๋ค.
SQL ์ฒ๋ฆฌ ๊ณผ์
SQLํ์ฑ๊ณผ ์ต์ ํ
1๏ธโฃ SQL ํ์ฑ
์ฌ์ฉ์๋ก๋ถํฐ SQL์ ์ ๋ฌ๋ฐ์ผ๋ฉด SQL ํ์๊ฐ ํ์ฑ์ ์งํํ๋ค.
๐ก SQL ๋ฌธ์ ์ด๋ฃจ๋ ๊ฐ๋ณ ๊ตฌ์ฑ ์์๋ฅผ ๋ถ์ํ์ฌ ํ์ฑ ํธ๋ฆฌ๋ฅผ ์์ฑํ๋ค.
๐ก ๊ทธ๋ฆฌ๊ณ ์ ๋ฌ ๋ฐ์ SQL ๋ฌธ์์ ๋ฌธ๋ฒ์ ์ค๋ฅ (์ฌ์ฉํ ์ ์๋ ํค์๋ ์ฌ์ฉ ๋ฑ) ๋ ์๋ฏธ์ ์ค๋ฅ(์กด์ฌํ์ง ์๋ ํ ์ด๋ธ ํน์ ์ปฌ๋ผ ์ฌ์ฉ ๋ฑ)๊ฐ ์กด์ฌํ๋์ง ํ์ธํ๋ค.
2๏ธโฃ SQL ์ต์ ํ
๐ก ์ตํฐ๋ง์ด์ ๋ ๋ค์ํ ์คํ ๊ฒฝ๋ก๋ฅผ ์์ฑํด์ ๋น๊ตํ ํ, ๊ฐ์ฅ ํจ์จ์ ์ธ ํ๋๋ฅผ ์ ํํ๋ค.
๊ทธ๋ ๊ฒ ์ ํํ ๊ฒฝ๋ก๋ฅผ ์คํ ๊ฐ๋ฅํ ์ฝ๋ ๋๋ ํ๋ก์์ ํํ๋ก ํฌ๋งทํ ํ๋ค.
์คํ ๊ณํ๊ณผ ๋น์ฉ
MySQL ์๋ฒ๋ก ์์ฒญ๋ ์ฟผ๋ฆฌ๋ ๊ฒฐ๊ณผ๋ ๋์ผํ์ง๋ง ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค์ด ๋ด๋ ๋ฐฉ๋ฒ์ ๋งค์ฐ ๋ค์ํ๋ค.
๋ค์ํ ๋ฐฉ๋ฒ ์ค, ๊ฐ์ฅ ์ต์ ์ด๊ณ ์ต์์ ๋น์ฉ์ด ์๋ชจ๋๋ ๋ฐฉ๋ฒ์ ์ ํํ๋ ์์ ์ ์ตํฐ๋ง์ด์ ๊ฐ ๋ด๋นํ๋ค.
MySQL ์ตํฐ๋ง์ด์ ๋ ์ฟผ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ ์ฌ๋ฌ ๊ฐ์ง ๊ฐ๋ฅํ ๋ฐฉ๋ฒ์ ๋ง๋ค๊ณ , ๊ฐ ๋จ์ ์์ ์ ๋น์ฉ ์ ๋ณด์ ๋์ ํ ์ด๋ธ์ ์์ธก๋ ํต๊ณ ์ ๋ณด๋ฅผ ์ด์ฉํด ์คํ ๊ณํ๋ณ ๋น์ฉ์ ์ฐ์ถํ๋ค.
๋ํ์ ์ธ ์ตํฐ๋ง์ด์ ๋ ์ฐ์ถ๋ ๋น์ฉ์ ๋ฐํ์ผ๋ก, ๋น์ฉ์ด ์ต์๋ก ์์๋๋ ์ฒ๋ฆฌ ๋ฐฉ์์ ์ ํํ๋ ๐ก ๋น์ฉ ๊ธฐ๋ฐ ์ตํฐ๋ง์ด์ ๊ฐ ์๋ค.
์คํ ๊ณํ์ ๋ณด๊ณ , ์์ ์ด ์์ฑํ SQL๋ฌธ์ด ํ ์ด๋ธ์ ์ค์บํ๋์ง ์ธ๋ฑ์ค๋ฅผ ์ค์บํ๋์ง ๋ฑ์ ํ์ ํ ์ ์๊ณ ์์๊ณผ ๋ค๋ฅด๊ฒ ์คํ๋๋ค๋ฉด ์คํ๊ฒฝ๋ก๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค.
์ตํฐ๋ง์ด์ ๊ฐ ๋ง๋ค์ด ๋ด๋ ์คํ ๊ณํ์ ์ดํดํ ์ ์์ด์ผ ์คํ ๊ณํ์ ๋ถํฉ๋ฆฌํ ๋ถ๋ถ์ ์ฐพ์๋ด๊ณ , ๋ ์ต์ ํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์ ๋ํ ์ ์๋ค.
๐ก ์ตํฐ๋ง์ด์ ๊ฐ ํญ์ 100% ์ค์์์ด ๋์ํ๋ ๊ฒ์ด ์๋๊ธฐ ๋๋ฌธ์, ์ตํฐ๋ง์ด์ ํํธ๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ๋ฐ์๊ฐ ์ง์ ๋ ํจ์จ์ ์ธ ์์ธ์ค ๊ฒฝ๋ก๋ฅผ ์ฐพ์๋ผ ์๋ ์๋ค.
์๋ฅผ ๋ค์ด,
SELECT /*+ INDEX(A (์ฃผ๋ฌธ์ผ์)) */
A.์ฃผ๋ฌธ๋ฒํธ, A.์ฃผ๋ฌธ๊ธ์ก, B.๊ณ ๊ฐ๋ช
, B.์ฐ๋ฝ์ฒ, B.์ฃผ์
FROM ์ฃผ๋ฌธ A, ๊ณ ๊ฐ B
WHERE A.์ฃผ๋ฌธ์ผ์ = :ORD_DT
AND A.๊ณ ๊ฐID = B.๊ณ ๊ฐID
์์ ๊ฐ์ด ์ฃผ์ ๊ธฐํธ์ '+' ๋ฅผ ๋ถ์ด๋ฉด ํํธ๋ฅผ ์ฌ์ฉํ ์ ์๊ณ , ์ ๊ฒฝ์ฐ์๋ ์ฃผ๋ฌธ์ผ์ ์ปฌ๋ผ์ด ์ ๋์ธ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋๋ก ํํธ๋ฅผ ์ง์ ํ ๊ฒ์ด๋ค.
๊ทธ ์ธ, ์กฐ์ธ ๋ฐฉ์์ด๋ ์กฐ์ธ ์์ ๋ฑ๋ ํํธ๋ฅผ ํตํด ์ง์ ํ ์ ์๋ค.
SQL ๊ณต์ ๋ฐ ์ฌ์ฌ์ฉ
์ํํธ ํ์ฑ VS ํ๋ ํ์ฑ
์ฌ์ฉ์๊ฐ SQL๋ฌธ์ ์ ๋ฌํ๋ฉด DBMS ๋ SQL์ ํ์ฑํ ํ ํด๋น ๐ก SQL์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์บ์์ ์กด์ฌํ๋์ง ํ์ธํ๋ค.
๐ก ์ฐพ์๋ค๋ฉด ๊ณง๋ฐ๋ก ์คํ๋จ๊ณ๋ก ๋์ด๊ฐ๊ณ (์ํํธ ํ์ฑ),
๐จ ๊ทธ๋ ์ง ๋ชปํ๋ค๋ฉด ์ฒ์์ ์ค๋ช ํ๋๋ก ๋ฌธ๋ฒ์ , ์๋ฏธ์ ์ค๋ฅ๊ฐ ์๋์ง ํ๋จํ๊ณ ์คํ ๊ฒฝ๋ก๋ฅผ ๋น๊ตํ๋ ์ต์ ํ ๋จ๊ณ๋ฅผ ์ํํ ๋ค ํฌ๋งทํ ํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์บ์์ ์ ์ฅํ๋ค. (ํ๋ ํ์ฑ)
์ฆ, ์ฌ์ฉ์์๊ฒ ๋ฐ์ SQL ๋ฌธ์ ํ์ฑํ๊ณ ์ต์ ํํ๋ ๊ณผ์ ์ ์์ฒญ๋ ์ฐ์ฐ์ด ์๋ชจ๋๊ธฐ ๋๋ฌธ์, ํ๋ฒ ์ฌ์ฉํ๊ณ ๋ฒ๋ฆฌ๊ธฐ์ ๋๋ฌด๋ ๋นํจ์จ์ ์ด๋ค.
๋ฐ๋ผ์ ์ฒ์๋ถํฐ ์ด ๋ชจ๋ ๊ณผ์ ์ ์งํํ๋ ๊ฒ์ ํ๋ ํ์ฑ์ด๋ผ๊ณ ๋ถ๋ฅผ ์ ์๊ณ
์ด๋ฏธ ๊ณ์ฐํด๋ ๋ฐ์ดํฐ๋ฅผ ํตํด ๋น ๋ฅด๊ฒ ํ์ฑ๋์ด ์คํ๋๋ ๊ฒฝ์ฐ๋ฅผ ์ํํธ ํ์ฑ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
โ ์ฒซ ๋ฒ์งธ SQL ๋ฌธ์ ํ์ฑํ๊ณ ๋ ๋ฒ์งธ SQL๋ฌธ์ ์คํํ๋ฉด ์ํํธ ํ์ฑ์ด ๋ ๊น ํ๋ ํ์ฑ์ด ๋ ๊น?
1. SELECT * FROM CUSTOMER WHERE LOGIN_ID = 'PAUL'; 2. SELECT * FROM CUSTOMER WHERE LOGIN_ID = 'JOHN';โ
์ผ๋ฐ์ ์ผ๋ก๋ ๋ ๊ตฌ๋ฌธ์ด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๊ณผ์ ์ ๋น์ทํ์ง๋ง ๋ค๋ฅธ ๊ตฌ๋ฌธ์ด๊ธฐ ๋๋ฌธ์ ๋๋ฒ์ ํ๋ ํ์ฑ์ด ์งํ๋๋ค.
๋ฐ๋ผ์, ํจ์จ์ ์ผ๋ก SQL๋ฌธ์ ํ์ฑํ๊ธฐ ์ํด์
SELECT * FROM CUSTOMER WHERE LOGIN_ID = ?;โ
LOGIN_ID ์ ๋ค์ด๊ฐ๋ ๋ถ๋ถ๋ง ๋ฐ์ธ๋ ๋ณ์๋ก ๋ฐ๋๋ก ํ๋ ํ๋ก์์ ๋ฅผ ๊ณต์ ํ๋ฉด์ ์ฌ์ฌ์ฉํ๋ฉด ์ฌ๋ฌ๊ฐ์ ํ๋ก์์ ๋ฅผ ์์ฑํ์ง ์์๋ ๋๋ค.
๊ธฐ์กด ๋ฐฉ์๋๋ก, ์ฟผ๋ฆฌ๊ฐ 100๊ฐ ์์ฒญ์ด ๋์๋ค๋ฉด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์บ์์๋ 100๊ฐ์ ํ๋ก์์ ๊ฐ ์์ฑ๋์ด์์ ๊ฒ์ด์ง๋ง
๊ฐ์ ํ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด
SELECT * FROM CUSTOMER WHERE LOGIN_ID = :1โ
์์ ๊ฐ์ ์ฟผ๋ฆฌ๋ง ์บ์ฑ๋์ด ์ฌ๋ฌ SQL์ด ๊ณต์ ํ๋ฉด์ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์ I/O

DB์ ์ฃผ๋ ์ญํ ์ ๋น์ฐํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ฒ์ด๋ค.
๊ทธ๋ฆฌ๊ณ , ํ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ ํ๋์ ๋ธ๋ก์ ํจ๊ป ์ ์ฅ๋๋ฉฐ ๋ค๋ฅธ ํ ์ด๋ธ์ ๋ฐ์ดํฐ์ ์์ฌ์์ง ์๋๋ค.
๋ค๋ง, ํ๋์ ๋ธ๋ก์ ์ ์ ํด์ ์ฌ์ฉํ๋ค๊ฐ ์ถ๊ฐ์ ์ผ๋ก ๊ณต๊ฐ์ด ํ์ํด์ง๋ฉด ์ถ๊ฐ์ ์ผ๋ก ๐ก ์ต์คํ ํธ ๋จ์๋ก ๊ณต๊ฐ์ ํ์ฅํ๋ค.
๋ค๋ง, ํ ๋ธ๋ก ์์์์ ๋ฐ์ดํฐ๋ ์ฐ์๋ ๊ณต๊ฐ์ด์ง๋ง, ๐จ ์ต์คํ ํธ ๋ผ๋ฆฌ๋ ๋ถ์ด์์ง ์์ผ๋ฉด ์ฐ์๋ ๊ณต๊ฐ์ด ์๋๊ณ ๊ณต๊ฐ์ ํ์ฅํ๋ ๊ณผ์ ์์ ๋น์ฐ์์ ์ผ๋ก ํ์ฅ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ ํํ๊ฒ ๋ฐ์ํ๋ค.
๋ฐ๋ผ์, ์ฐ๊ด๋ ์ต์คํ ํธ ๋ด์ ๋ธ๋ก์ ์ฐพ๋ ๊ณผ์ ์์ ๋น์ฉ์ด ๋ฐ์ํ๊ฒ ๋๋ ๊ฒ์ด๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์ I/O ๋จ์๋ ์ผ๋ฐ์ ์ผ๋ก ๐ก ๋ธ๋ก์ด ๋๋ค.
๋ฐ๋ผ์, ๋ธ๋ก ๋ด์ ๋ ์ฝ๋ 1๊ฐ๋ฅผ ์ฝ๊ณ ์ถ์ด๋ ๋ธ๋ก์ ํต์งธ๋ก ์ฝ์ด์ผํ๋ค.
์ด๋ฌํ ๋ธ๋ก์ ์ฝ๋ ๋ฐฉ๋ฒ์ ์ํ์ ์์ธ์ค ๋ฐฉ์๊ณผ ๋๋ค ์์ธ์ค ๋ฐฉ์์ด ์กด์ฌํ๋ค.
์ํ์ ์์ธ์ค ๋ฐฉ์์ ๋ ผ๋ฆฌ์ ๋๋ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์ฐ๊ฒฐ๋ ์์์ ๋ฐ๋ผ ๋ธ๋ก์ ์ฝ๋ ๋ฐฉ์์ด๊ณ
๋๋ค ์์ธ์ค ๋ฐฉ์์ ๋ ผ๋ฆฌ์ ๋๋ ๋ฌผ๋ฆฌ์ ์์๋ฅผ ๋ฐ๋ฅด์ง ์๊ณ ํ ๋ธ๋ก์ฉ ๋น์ฐ์์ ์ผ๋ก ์ ๊ทผํ๋ ๋ฐฉ์์ด๋ค.
๋ ผ๋ฆฌ์ I/O ์ ๋ฌผ๋ฆฌ์ I/O
๋์คํฌ์์ ๋งค๋ฒ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ค๋ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ ๊ฒ์ ๋งค์ฐ ํฐ ๋น์ฉ์ด๊ธฐ ๋๋ฌธ์
ํ๋ฒ ์ฝ์ด ์จ ๋ฐ์ดํฐ๋ ์บ์์ ์ ์ฅํด๋๊ฒ๋๋ค.
๐ก ๋ ผ๋ฆฌ์ I/O๋ ๋ฒํผ์ ๋์คํฌ๋ฅผ ๊ตฌ๋ถ์ง์ง ์๊ณ ๋ธ๋ก์ ์ฝ์ ํ์๋ก ๋ณผ ์ ์๊ณ
๐ก ๋ฌผ๋ฆฌ์ I/O๋ ์ฐพ์ผ๋ ค๋ ๋ธ๋ก์ด ๋ฒํผ์ ์กด์ฌํ์ง ์์์ ๋์คํฌ๋ก ๊ฐ์ ์ฝ์ด์จ ํ์(์บ์ ํํธ์ ์คํจํ ํ์์ ์ ์ฌ)๋ก ๋ณผ ์ ์๋ค.
โ ๋ฌผ๋ฆฌ์ I/O์ ๊ฒฝ์ฐ ์์คํ ์ํฉ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ ๋ณ์์ด๋ฏ๋ก ๋ ผ๋ฆฌ์ I/O๋ฅผ ๊ฐ์ ํ๋ ๊ฒ์ด ์ฑ๋ฅ ํฅ์์ ์ค์ํ๋ค. ๊ทธ๋ ๋ค๋ฉด ๋ ผ๋ฆฌ์ I/O๋ ์ด๋ป๊ฒ ์ค์ผ ์ ์์๊น?
์ ์ด์ DB ์ SQL์ ์์ฒญํ ๋, ๋ธ๋ก ๊ฐ์๋ฅผ ์กฐ๊ธ ์ฝ๊ฒ๊ธ ์์ฒญํ๋๊ฒ์ด ๊ฐ์ฅ ํ์คํ๋ค.
๋ ผ๋ฆฌ์ I/O๋ฅผ ์ค์์ผ๋ก์ ๋ฌผ๋ฆฌ์ I/O๋ฅผ ์ค์ด๋ ๊ฒ์ด SQL ํ๋์ด๋ผ๊ณ ํ ์ ์๋ค.