ํ์ฌ์์ ๊ฐ๋ฐ์ ์งํํ๋ฉด์ ์ตํฐ๋ง์ด์ ๊ฐ ์ต์ ์ด๋ผ๊ณ ์๊ฐํ๋ ์คํ ๊ณํ๊ณผ ์ค์ ์ต์ ์ ์คํ ๊ณํ์ ์ข ์ข ์ฐจ์ด๊ฐ ์๋ค๋ ๊ฒ์ ์๊ฒ ๋์๋ค.
์ด๋, ๋ด๊ฐ ์งํํ๋ ๊ฐ์ ๋ฐฉํฅ์
- ํด๋น ํ ์ด๋ธ์ ๋ํด ์ด๋ฏธ ์กด์ฌํ๋ ๋ค๋ฅธ ์ธ๋ฑ์ค๋ก ๋ณ๊ฒฝํ์ฌ ๊ฐ์ ๊ฐ๋ฅํ๊ฐ?
- ์ธ๋ฑ์ค๋ฅผ ์์ ํ๊ฑฐ๋ ์๋ก ์ถ๊ฐํ์ฌ ๊ฐ์ ๊ฐ๋ฅํ๊ฐ?
1๋ฒ์ผ๋ก ํด๊ฒฐ ๊ฐ๋ฅํ ๋ถ๋ถ์ SQL์ ์ก์ธ์ค ๋ฐฉ์์ด๋ ์กฐ์ธ ์์, ์กฐ์ธ ๋ฐฉ์ ๋ํ Hint๋ฅผ ์ถ๊ฐํ์ฌ ๊ฐ์ ์ ์งํํ๊ณ ,
1๋ฒ์ผ๋ก ํด๊ฒฐ์ด ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ ์ฆ, 2๋ฒ์ ๊ฒฝ์ฐ์๋ ์ธ๋ฑ์ค์ ์์๋ฅผ ๋ณ๊ฒฝํ๊ฑฐ๋ ๊ตฌ์ฑ ์ปฌ๋ผ์ ๋ณ๊ฒฝํ๋ ์์
์ ์งํํ๋ค.
ํด๋น ๊ธ์์๋ 1๋ฒ์ ์ผ์ด์ค์ ์ ์ฉํ ์ตํฐ๋ง์ด์ ํํธ์ ๋ํด์ ๊ฐ๋จํ๊ฒ ์ ๋ฆฌํ๊ณ ์ ํ๋ค.
์ตํฐ๋ง์ด์ Hint
์ค๋ธ์ ํธ ํต๊ณ์ ์์คํ ํต๊ณ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ์ต์ ์ ํ๋ก์์ ๋ฅผ ๋ง๋๋ ์ตํฐ๋ง์ด์ ๋ ๋๋๋ก ๋ณต์กํ ๊ฒฝ์ฐ์๋ ํ๊ณ๊ฐ ๋ฐ์ํ๋ค.
์ด๋ฌํ ๊ฒฝ์ฐ์ ์ง์ SQL์ ํจ์จ์ ์ธ ๊ฒฝ๋ก์ ๋ํ Hint๋ฅผ ๋ถ์ฌํจ์ผ๋ก์จ ๊ฐ์ ํ ์ ์๋ค.
์๋๋ A ํ ์ด๋ธ์ ๋ํด์ IDX_01๋ผ๋ ์ธ๋ฑ์ค๋ก ์ก์ธ์คํ๋๋ก ์ค์ ํ๋ ํํธ๋ฅผ ์ ์ฉํ ์์์ด๋ค.
SELECT /*+ INDEX(A, IDX_01) */
x, y, z
FROM A
WHERE A.id = '000001'
Hint ์ฌ์ฉ ์ฃผ์์ฌํญ
ํํธ๋ฅผ ์ฌ์ฉํ ๋๋ ์ฃผ์ํ ์ฌํญ์ด ์๋ค.
์ฒซ์งธ๋ก, ํํธ์ ํํธ ์ฌ์ด์๋ ์ฝค๋ง(,)๋ฅผ ์ฌ์ฉํ๋ฉด ์ ๋๋ค.
๋ถ์ ์ ํ ์ผ์ด์ค
/* INDEX(A), FULL(B) */
์ ์ ํ ์ผ์ด์ค
/* INDEX(A) FULL(B) */
๋์งธ๋ก, ํ ์ด๋ธ์ ์ง์ ํ ๋, ์คํค๋ง๋ช ๊น์ง ๋ช ์ํ๋ฉด ์ ๋๋ค.
๋ถ์ ์ ํ ๊ฒฝ์ฐ
SELECT /*+ FULL(KHS.A) */
์ ์ ํ ๊ฒฝ์ฐ
SELECT /*+ FULL(A) */
์ ์งธ๋ก, FROM ์ ํ ์ด๋ธ๋ช ์ Alias๋ฅผ ์ง์ ํ๋ค๋ฉด, ํํธ์๋ Alias๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
๋ถ์ ์ ํ ๊ฒฝ์ฐ
SELECT /*+ FULL(TAB1) */
FROM TAB1 A
์ ์ ํ ๊ฒฝ์ฐ
SELECT /*+ FULL(A) */
FROM TAB1 A
์ตํฐ๋ง์ด์ ๋ฐ์์จ
ํํธ๋ฅผ ์ ์ฉํ ๊ฒฝ์ฐ, ํน์ ํ ์ด๋ธ์ ๋ํด ์ก์ธ์ค ๋ฐฉ์๋ง ํํธ๋ฅผ ์ฃผ๊ณ ๋๋จธ์ง๋ ์ตํฐ๋ง์ด์ ์๊ฒ ๋งก๊ธฐ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค.
์๋์ SQL์ ๊ฒฝ์ฐ a ํ
์ด๋ธ์ ์ก์ธ์คํ ๋ IDX_dt๋ผ๋ ์ธ๋ฑ์ค์ ์ ๊ทผํ๋๋ก๋ง ํํธ๋ฅผ ๋ช
์ํ๊ณ ,
์กฐ์ธ ๋ฐฉ์๊ณผ ์์ ๊ทธ๋ฆฌ๊ณ B ํ
์ด๋ธ์ ๋ํ ์ก์ธ์ค ๋ฐฉ์์ ์ตํฐ๋ง์ด์ ๊ฐ ํ๋จํ๋๋ก ๋งก๊ฒผ๋ค.
SELECT /*+ INDEX(a, IDX_dt) */
x, y, z
FROM A a, B b
WHERE a.dt =: dt
AND a.id = b.id
์ด๋ฒ์๋ SQL์ ์ตํฐ๋ง์ด์ ๊ฐ ๋ค๋ฅธ ๋ฐฉ์์ ์ ํํ์ง ๋ชปํ๋๋ก ํํธ๋ฅผ ๋นํ์์ด ๊ณ ์ ํ ์ผ์ด์ค์ด๋ค.
SELECT /*+ LEADING(A) USE_NL(B) INDEX(a, IDX_dt) INDEX(b, IDX_id) */
x, y, z
FROM A a, B b
WHERE a.dt =: dt
AND a.id = b.id
ํต๊ณ ์ ๋ณด๋ ์คํ ํ๊ฒฝ์ ๋ณํ๋ก ์ธํด์ ์ตํฐ๋ง์ด์ ๊ฐ ์ต์ ์ ๊ฒฝ๋ก๋ฅผ ์ฐพ์ง ๋ชปํ ๊ฒฝ์ฐ๋ฅผ ๋๋นํ์ฌ ์ด๋ฏธ ํํธ ์ ์ฉ์ ์์ํ๋ค๋ฉด ๋นํ์์ด ์ค์ ํ๋ ๊ฒ์ด ์ข์ ๋ฐฉํฅ์ด๋ผ๊ณ ์๊ฐํ๋ค.
์ฌ๊ธฐ์ ๋ชจ๋ ๊ธฐ์ ํ์ง๋ ์์ ๊ฒ์ด์ง๋ง ๋ค๋ฅธ ํํธ ์ข ๋ฅ๋ฅผ ์ธ๊ธ๋ง ํ๊ณ ๋ง๋ฌด๋ฆฌํ๊ณ ์ ํ๋ค.
- ์ก์ธ์ค ๋ฐฉ์ : FULL, INDEX, INDEX_DESC ...
- ์กฐ์ธ ์์ : ORDERD, LEADING...
- ์กฐ์ธ ๋ฐฉ์ : USE_NL, USE_MERGER, USE_HASH, NL_SG, MERGER_SJ, HASH_SJ
๋ค๋ฅธ ์ฟผ๋ฆฌ ๋ณํ, ๋ณ๋ ฌ ์ฒ๋ฆฌ ๋ฑ๋ฑ์ ์ํ ํํธ๋ ์กด์ฌํ์ง๋ง ํ์ฌ๋ก์๋ ์ก์ธ์ค ๋ฐฉ์, ์กฐ์ธ ์์, ์กฐ์ธ ๋ฐฉ์์๋ง ์ง์คํ๊ณ ์ ํ๋ค.
'๐ข๏ธDatabase' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
DB ์ ํ๋์ ์นด๋๋๋ฆฌํฐ (+์ตํฐ๋ง์ด์ ํต๊ณ ์ ๋ณด) (0) | 2025.01.09 |
---|---|
XA Datasource์ 2 Phase Commit(2PC)ย ์ ๋ํด์ (0) | 2024.05.08 |
MySQL์ ๊ฒฉ๋ฆฌ ์์ค(Isolation Level) (0) | 2023.09.11 |
[Real MySQL 8.0] ์ฟผ๋ฆฌ ์์ฑ ๋ฐ ์ต์ ํ - JOIN (0) | 2023.08.22 |
Redis ์๊ณ ์ฌ์ฉํ์! (0) | 2023.08.20 |