๐งท SQL ํ์ฑ๊ณผ ์ต์ ํ
๐๏ธ SQL ์ด๋?
SQL : Structured Query Language
SQL์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ดํฐ๋ฅผ ์ง์, ์กฐ์, ์ ์, ์ ์ดํ๊ธฐ ์ํ ๊ตฌ์กฐ์ (Structured)์ด๊ณ ์งํฉ์ (Set-Based)์ด๋ฉฐ ์ ์ธ์ (Declarative)์ธ ์ธ์ด์ด๋ค. ์ค๋ผํด PL/SQL, SQL Server T-SQL์ฒ๋ผ ์ ์ฐจ์ (Procedural) ํ๋ก๊ทธ๋๋ฐ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ํ์ฅ ์ธ์ด๋ ์์ง๋ง, SQL์ ์งํฉ ๊ธฐ๋ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป๊ธฐ ์ํ ์ ์ธ์ ์ธ์ด์ด๋ค.
์ฌ์ฉ์๋ SQL์ ํตํด ์ํ๋ ๋ฐ์ดํฐ ๊ฒฐ๊ณผ๋ฅผ ์ ์ธํ์ง๋ง, ๊ทธ ๊ฒฐ๊ณผ ์งํฉ์ ๋ง๋๋ ๊ณผ์ ์ ์ ์ฐจ์ ์ผ ์๋ฐ์ ์๋ค. ์ด๋ฌํ ๊ณผ์ ์ ์ฒ๋ฆฌํ๋ DBMS ๋ด๋ถ ์์ง์ด ๋ฐ๋ก SQL ์ตํฐ๋ง์ด์ (Optimizer)
์ด๋ฉฐ, ์ฌ์ฉ์๊ฐ ์์ฑํ SQL์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ ์คํ ๊ณํ์ ์๋ฆฝํ๋ค. ์ตํฐ๋ง์ด์ ๊ฐ ํ๋ก๊ทธ๋๋ฐ์ ๋์ ํ๋ ์
์ด๋ค.
์ฌ์ฉ์ -[SQL]→ ์ตํฐ๋ง์ด์ -[์คํ๊ณํ]→ ํ๋ก์์
DBMS ๋ด๋ถ์์ ํ๋ก์์ ๋ฅผ ์์ฑํ๊ณ ์ปดํ์ผํด์ ์คํํ ์ ์๋ ์ํ๋ก ๋ง๋๋ ์ ๊ณผ์ ์ SQL ์ต์ ํ
๋ผ๊ณ ํ๋ค.
๐๏ธ SQL ์ฒ๋ฆฌ ๊ณผ์
SQL ์ฒ๋ฆฌ ๊ณผ์ ์ ์์ ์ฌ์ง์ฒ๋ผ 3๋จ๊ณ๋ก ๋๋์ด์ง๋ค. ์ฌ์ฉ์๊ฐ SQL ๋ฌธ์ ์คํํ๋ฉด SQL ํ์ฑ์ ๊ฑฐ์น ํ, ํด๋น SQL์ด ์ด๋ฏธ ๋ฉ๋ชจ๋ฆฌ์ ์บ์ฑ ๋์ด ์๋์ง ํ์ธํ๋ค. ์บ์ฑ ๋์ด ์์ผ๋ฉด ์ํํธ ํ์ฑ(Soft Parsing)
์ผ๋ก ๊ณง๋ฐ๋ก ์คํ๋จ๊ณ๋ก ๋์ด๊ฐ๋ฉฐ, ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ํ๋ ํ์ฑ(Hard Parsing)
์ผ๋ก ์ต์ ํ ๋ฐ ๋ก์ ์์ค ์์ฑ ๋จ๊ณ๋ฅผ ์งํํ๋ค.
1. SQL ํ์ฑ
(1) ํ์ฑ ํธ๋ฆฌ ์์ฑ
์ฌ์ฉ์๋ก๋ถํฐ SQL์ ์ ๋ฌ๋ฐ์ผ๋ฉด ๊ฐ์ฅ ๋จผ์ SQL ํ์(Parser)
๊ฐ SQL ๋ฌธ์ ๋ถ์ํ์ฌ ํ์ฑ ํธ๋ฆฌ ์์ฑํ๋ค. ํ์ฑ ํธ๋ฆฌ๋ SQL๋ฌธ ์ ๊ตฌ์ฑํ๋ ๊ฐ๋ณ ์์๋ค์ ํธ๋ฆฌ ํํ๋ก ๊ตฌ์กฐํํ ๊ฒ์ด๋ค.
(2) ์ค๋ฅ ์ฒดํฌ
ํ์ฑ ํธ๋ฆฌ๊ฐ ๋ง๋ค์ด์ง๋ ๊ณผ์ ์์ Syntax ๊ฒ์ฌ๋ฅผ ์งํํ๊ณ , ๊ทธ ํ์๋ Semantic ๊ฒ์ฌ๋ฅผ ์งํํ๋ค.
- Syntax ์ฒดํฌ : ๋ฌธ๋ฒ์ ์ค๋ฅ๊ฐ ์๋์ง ํ์ธ
- Semantic ์ฒดํฌ : ์๋ฏธ์ ์ค๋ฅ๊ฐ ์๋์ง ํ์ธ ex, ๊ถํ ๋ถ์กฑ, ๊ณต๊ฐ ๋ถ์กฑ
(3) ์บ์ฑ ์ฌ๋ถ ํ์ธ
์ค๋ฅ๊ฐ ์๋ค๋ฉด, ํด์ฑ ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํด Shared Pool
์ ํด๋น SQL ์ปค์๊ฐ ์ด๋ฏธ ์บ์ฑ ๋์ด์๋์ง ํ์ธํ๋ค.
- SQL ๋ฌธ๊ณผ 100% ์ผ์น
- ํ์ฑ์ ์์ฒญํ ์ฌ์ฉ์์ ์ผ์น
- ์ตํฐ๋ง์ด์ ๊ด๋ จ ํ๋ผ๋ฏธํฐ ์ค์ ์ผ์น
์์ ๊ฒฝ์ฐ๋ฅผ ๋ง์กฑํ๋ค๋ฉด ์คํ๊ณํ์ ์ฌ์ฌ์ฉํ๊ณ , ์กฐ๊ฑด์ ๋ง์กฑํ์ง ์๊ฑฐ๋ ์บ์ฑ ๋ ์ปค์๊ฐ ์๋ ๊ฒฝ์ฐ ์ต์ ํ ๊ณผ์ ์ ์ํํ๋ค.
2. SQL ์ต์ ํ
SQL ์ต์ ํ๋ SQL ์ตํฐ๋ง์ด์
๊ฐ ์ฒ๋ฆฌํ๋ฉฐ, ํจ์จ์ ์ธ ์คํ๊ณํ์ ์๋ฆฝํ๋ ๋จ๊ณ์ด๋ค. SQL ์ตํฐ๋ง์ด์ ๋ ์์คํ
๋ฐ ์ค๋ธ์ ํธ ํต๊ณ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ๋ค์ํ ์คํ๊ฒฝ๋ก๋ฅผ ์์ฑํด์ ๋น๊ตํ๊ณ , ๊ฐ์ฅ ํจ์จ์ ์ธ ์คํ๊ฒฝ๋ก๋ฅผ ์ ํํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฑ๋ฅ์ ๊ฒฐ์ ํ๋ ๊ฐ์ฅ ํต์ฌ์ ์ธ ์์ง์ด๋ค. ์ตํฐ๋ง์ด์ ๋ ์ต์ ํ ๊ณผ์ ์์ ์ธ๋ถ์ ์ผ๋ก 3๊ฐ์ ์๋ธ ์์ง์ ์ํํ๋ค.
- Query Transformer : ์ต์ ํํ๊ธฐ ์ฌ์ด ํํ๋ก ์ฟผ๋ฆฌ ๋ณํ. ๋ณํ ํ์๋ ๊ฒฐ๊ณผ๊ฐ ๋์ผํจ์ ๋ณด์ฅ๋ ๊ฒฝ์ฐ์๋ง ์งํํ๋ค.
- Plan Generator : ์คํ๊ณํ์ ์์ฑ
- Estimator : ๋ฐ์ดํฐ ๋์ ๋๋ฆฌ(Data Dictionary)์ ๋ฏธ๋ฆฌ ์์งํด ๋ ์ค๋ธ์ ํธ(ํ ์ด๋ธ, ์ธ๋ฑ์ค ๋ฑ) ํต๊ณ์ ์์คํ ํต๊ณ์ ๋ณด๋ฅผ ์ด์ฉํด ์ด๋น์ฉ์ ๊ณ์ฐ (์์์น)
์คํ๊ณํ(Execution Plan)
์ตํฐ๋ง์ด์ ๊ฐ ์์ฑํ ์ฒ๋ฆฌ ์ ์ฐจ๋ฅผ ์ฌ์ฉ์๊ฐ ํ์ธํ ์ ์๊ฒ ํธ๋ฆฌ๊ตฌ์กฐ๋ก ํํํ ๊ฒ์ด๋ค. SQL์ด ํ ์ด๋ธ ์ค์บ, ์ธ๋ฑ์ค ์ค์บ ๋ฐฉ์ ๋ฑ์ ํ์ธํ ์ ์์ผ๋ฉฐ, ์์๊ณผ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌ๋๋ค๋ฉด ์คํ๊ฒฝ๋ก๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค.
๋น์ฉ(Cost)
์ตํฐ๋ง์ด์ ๊ฐ ์คํ๊ณํ์ ์ ํํ๋ ๊ทผ๊ฑฐ๋ก, ์ฟผ๋ฆฌ๋ฅผ ์ํํ๋ ๋์ ๋ฐ์ํ ๊ฒ์ผ๋ก ์์ํ๋ I/O ํ์ ๋๋ ์์ ์์ ์๊ฐ์ ํํํ ๊ฐ์ด๋ค. ์ฌ๋ฌ ํต๊ณ์ ๋ณด๋ฅผ ํ์ฉํด์ ๊ณ์ฐํ ์์๊ฐ์ด๊ธฐ ๋๋ฌธ์ ์ค์ ๊ฐ๊ณผ๋ ์ฐจ์ด๊ฐ ๋ฐ์ํ ์ ์๋ค.
3. ๋ก์ฐ ์์ค ์์ฑ
SQL ์ตํฐ๋ง์ด์ ๊ฐ ์ ํํ ์คํ๊ฒฝ๋ก๋ฅผ ์ค์ ์คํ ๊ฐ๋ฅํ ์ฝ๋ ๋๋ ํ๋ก์์ ํํ๋ก ํฌ๋งทํ
ํ๋ ๋จ๊ณ์ด๋ค. ๋ก์ฐ ์์ค ์์ฑ๊ธฐ(Row-Source Generator)
๊ฐ ์ฒ๋ฆฌํ๋ค.
๐๏ธ ์ตํฐ๋ง์ด์ ํํธ
๋๋ถ๋ถ์ ๊ฒฝ์ฐ SQL ์ตํฐ๋ง์ด์ ๋ ์ต์ ์ ์ ํ์ ํ์ง๋ง, ํญ์ ์ต์ ์ ์ ํ์ ํ๋ ๊ฒ์ด ์๋๋ค. SQL์ด ๋ณต์กํ ์๋ก ์ค์ํ ๊ฐ๋ฅ์ฑ๋ ํฌ๊ธฐ ๋๋ฌธ์ด๋ค. ์ด๋, ํํธ๋ฅผ ์ด์ฉํด ์ก์ธ์ค ๊ฒฝ๋ก๋ฅผ ๋ฐ๊ฟ ์ ์๋ค. ํํธ ์ฌ์ฉ๋ฒ์ /*+ hint */
์ --+ hint
๊ฐ ์๋ค. ํ์์ ๊ฒฝ์ฐ, ๋์ ์ฟผ๋ฆฌ ์ฌ์ฉ ์ ์ค ๋ฐ๊ฟ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์๊ธฐ ๋๋ฌธ์ ๊ฐ๊ธ์ ์ฌ์ฉ์ ์์ ํ๋ ๊ฒ ์ข๋ค.
- ํต๊ณ์ ๋ณด๋ ์คํ ํ๊ฒฝ ๋ณํ์๋ ๋ฌธ์ ๊ฐ ์๋ ๊ฒฝ์ฐ : ํํธ๋ฅผ ์ต์ํํ์ฌ ์ตํฐ๋ง์ด์ ์ ์์จ์ฑ์ ๋ณด์ฅ
- ์์ ์ค์์๋ ํฐ ์์ค์ ์ด๋ํ๋ ์์คํ : ํํธ๋ฅผ ์ธ๋ฐํ๊ฒ ์ง์ ํ์ฌ ์ตํฐ๋ง์ด์ ์ ๊ฒฐ์ ์ ์ ํ
์ฃผ์์ฌํญ
- ํํธ์ ํํธ ์ฌ์ด์
,
์ ์ฌ์ฉํ๋ฉด ์ ๋๋ค. - ํ ์ด๋ธ ์ง์ ์ ์คํค๋ง ๋ช ์ ๋ช ์ํ์ง ์๋๋ค.
- ํ ์ด๋ธ์ ALLAS๋ฅผ ์ง์ ํ๋ค๋ฉด, ํํธ์๋ ๋ฐ๋์ ๋์ผํ ALLAS๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
์์ฃผ ์ฌ์ฉํ๋ Hint
๋ถ๋ฅ | ํํธ | ์ค๋ช |
์ต์ ํ ๋ชฉํ | ALL_ROWS | ์ ์ฒด ์ฒ๋ฆฌ ์๋ ์ต์ ํ |
FIRST_ROWS(N) | ์ต์ด N ๊ฑด ์๋ต์๋ ์ต์ ํ | |
์ก์ธ์ค ๋ฐฉ์ | FULL | Tabl Full Scan์ผ๋ก ์ ๋ |
INDEX | Index Scan์ผ๋ก ์ ๋ | |
INDEX_DESC | Index๋ฅผ ์ญ์์ผ๋ก ์ค์บํ๋๋ก ์ ๋ | |
INDEX_FFS | Index Fast Full Scan์ผ๋ก ์ ๋ | |
INDEX_SS | Index Skip Scan์ผ๋ก ์ ๋ | |
์กฐ์ธ์์ | ORDERED | FROM ์ ์ ๋์ด๋ ์์๋๋ก ์กฐ์ธ |
LEADING | LEADING ํํธ ๊ดํธ์ ์์๋๋ก ์กฐ์ธ | |
SWAP_JOIN_INPUTS | ํด์ ์กฐ์ธ ์, BUILD INPUT์ ๋ช ์์ ์ผ๋ก ์ ํ | |
์กฐ์ธ๋ฐฉ์ | USE_NL | NL ์กฐ์ธ์ผ๋ก ์ ๋ |
USE_MERGE | ์ํธ ๋จธ์ง ์กฐ์ธ์ผ๋ก ์ ๋ | |
USE_HASH | ํด์ ์กฐ์ธ์ผ๋ก ์ ๋ | |
NL_SJ | NL ์ธ๋ฏธ์กฐ์ธ์ผ๋ก ์ ๋ | |
MERGE_SJ | ์ํธ ๋จธ์ง ์ธ๋ฏธ์กฐ์ธ์ผ๋ก ์ ๋ | |
HASH_SJ | ํด์ ์ธ๋ฏธ์กฐ์ธ์ผ๋ก ์ ๋ | |
์๋ธ์ฟผ๋ฆฌ ํฉํ ๋ง | MATERIALIZE | WITH ๋ฌธ์ผ๋ก ์ ์ํ ์งํฉ์ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์์ฑํ๋๋ก ์ ๋ |
INLINE | WITH ๋ฌธ์ผ๋ก ์ ์ํ ์งํฉ์ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์์ฑํ์ง ์๊ณ INLINE ์ฒ๋ฆฌํ๋๋ก ์ ๋ | |
์ฟผ๋ฆฌ ๋ณํ | MERGE | ๋ทฐ ๋จธ์ง ์ ๋ |
NO_MERGE | ๋ทฐ ๋จธ์ง ๋ฐฉ์ง | |
UNNEST | ์๋ธ์ฟผ๋ฆฌ Unnesting ์ ๋ | |
NO_UNNEST | ์๋ธ์ฟผ๋ฆฌ Unnesting ๋ฐฉ์ง | |
PUSH_PRED | ์กฐ์ธ ์กฐ๊ฑด Pushdown ์ ๋ | |
NO_PUSH_PRED | ์กฐ์ธ ์กฐ๊ฑด Pushdown ๋ฐฉ์ง | |
USE_CONCAT | OR ๋๋ IN_List ์กฐ๊ฑด์ OR-Expansion์ผ๋ก ์ ๋ | |
NO_EXPAND | OR ๋๋ IN_List ์กฐ๊ฑด์ ๋ํ OR-Expansion ๋ฐฉ์ง | |
๋ณ๋ ฌ ์ฒ๋ฆฌ | PARALLEL | ํ ์ด๋ธ ์ค์บ ๋๋ DML์ ๋ณ๋ ฌ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ๋๋ก ์ ๋ |
PARALLEL_INDEX | ์ธ๋ฑ์ค ์ค์บ์ ๋ณ๋ ฌ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ๋๋ก ์ ๋ | |
PQ_DISTRIBUTE | ๋ณ๋ ฌ ์ํ ์ ๋ฐ์ดํฐ ๋ถ๋ฐฐ ๋ฐฉ์ ๊ฒฐ์ | |
๊ธฐํ | APPEND | Direct-Path Insert๋ก ์ ๋ |
DRIVING_SITE | DB Link Remote ์ฟผ๋ฆฌ์ ๋ํ ์ต์ ํ ๋ฐ ์คํ ์ฃผ์ฒด ์ง์ (Local ๋๋ Remote) | |
PUSH_SUBQ | ์๋ธ์ฟผ๋ฆฌ๋ฅผ ๊ฐ๊ธ์ ๋นจ๋ฆฌ ํํฐ๋งํ๋๋ก ์ ๋ | |
NO_PUSH_SUBQ | ์๋ธ์ฟผ๋ฆฌ๋ฅผ ๊ฐ๊ธ์ ๋ฆ๊ฒ ํํฐ๋งํ๋๋ก ์ ๋ |
Reference
'DB > SQLP' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SQLP] 1-5. I/O ๋ฉ์ปค๋์ฆ (0) | 2025.02.11 |
---|---|
[SQLP] 1-4. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์บ์ ์ต์ ํ (0) | 2025.02.09 |
[SQLP] 1-3. SQL ๊ณต์ ๋ฐ ์ฌ์ฌ์ฉ (0) | 2025.02.09 |
[SQLP] 1-1. Oracle ์ํคํ ์ฒ (0) | 2025.02.09 |
[SQLP] ๋น์ ๊ณต์ ๊ฐ๋ฐ์, ์ผ๊ทผ ํ๋ฉด์ 6๊ฐ์ ๋ง์ SQLP ํฉ๊ฒฉ ํ๊ธฐ ๋ฐ ๊ณต๋ถ ๋ฐฉ๋ฒ (์ 51ํ ์ํ) ๐ (0) | 2024.10.06 |