Oracle Query - ynjch97/YNJCH_WIKI GitHub Wiki
1. Oracle Hint
/*+ [ํํธ๋ช
] */
์ด์ ๊ฐ์ด ์ฌ์ฉ
- ์ฌ๋ฌ ๊ฐ์ ํํธ๋ฅผ ๋์ดํ ์ ์์ผ๋ฉฐ ํํธ ์ฌ์ด๋ SPACE(๊ณต๋ฐฑ)๋ก ๊ตฌ๋ถ
- ๊ดํธ ์์ ํ
์ด๋ธ์ ALIAS(๋ณ์นญ)๋ก ์ ์ํ๋ฉฐ, ๊ดํธ ์ฌ์ด์๋ ์ผํ๋ก ๊ตฌ๋ถ
- ์:
/*+ LEADING(A,B) USE_HASH(A,B) */
1-1. ์ต์ ํ Hint
/*+ ALL_LOWS */
: ์ ์ฒด ์ฒ๋ฆฌ์๋ ์ต์ ํ
/*+ FIRST_ROWS(N) */
: ์ต์ด N๊ฑด ์๋ต์๋ ์ต์ ํ
1-2. ์์ธ์ค ๋ฐฉ์์ ๋ฐ๋ฅธ Hint
/*+ FULL */
: ์ธ๋ฑ์ค๋ฅผ ํ์ง ์๊ณ ๋ฐ๋ก ํ
์ด๋ธ Full Scan ์ ๊ทผ
/*+ INDEX */
: ์ธ๋ฑ์ค๋ฅผ ํ๋๋ก ํจ
/*+ INDEX_DESC */
: ์ธ๋ฑ์ค๋ฅผ ์ญ์์ผ๋ก(ORDER BY DESC) ํ๋๋ก ํจ (์๊ฐ ์์๊ฐ ์ต๊ทผ์ธ ๊ฒ ๋๋ MAX๊ฐ ๊ตฌํ ๋ ์ฌ์ฉ)
/*+ INDEX_FFS */
: INDEX FAST FULL SCAN
/*+ INDEX_SS */
: INDEX SKIP SCAN
/*+ INDEX_RS */
: INDEX RANGE SCAN
1-3. ์กฐ์ธ ์์์ ๋ฐ๋ฅธ Hint
/*+ ORDERED */
: FROM์ ์ ๋์ด๋ ํ
์ด๋ธ ์์๋๋ก ์กฐ์ธ
/*+ LEADING */
: ํํธ์ ์ ์ด๊ฑฐํ ํ
์ด๋ธ ์์๋๋ก ์กฐ์ธ (/*+ LEADING(A B C) */
: A B C ์์๋๋ก ์กฐ์ธ)
/*+ SWAP_JOIN_INPUTS */
: ํด์์กฐ์ธ์ ๊ฒฝ์ฐ, BUILD INPUT๋ฅผ ๋ช
์์ ์ผ๋ก ์ ํ ( /*+ SWAP_JOIN_INPUTS(A) */
, BUILD INPUT๊ณผ PROBE์ ๋ํ ์์๋ฅผ ์ ํ ์ ์์)
1-4. ์กฐ์ธ ๋ฐฉ์์ ๋ฐ๋ฅธ Hint
/*+ USE_NL */
: NL(NESTED LOOP - ์ค์ฒฉ๋ฃจํ)๋ฐฉ์ JOIN ์ ๋
/*+ USE_MERGE */
: SORT MERGE JOIN ์ ๋
/*+ USE_HASH */
: HASH JOIN ์ ๋
/*+ NL_SJ */
: NL SEMI JOIN ์ ๋
/*+ MERGE_SJ */
: SORT MERGE SEMI JOIN ์ ๋
/*+ HASH_SJ */
: HASH SEMI JOIN ์ ๋
1-5. ์ฟผ๋ฆฌ ๋ณํ Hint
/*+ MEERGE */
: ๋ทฐ ๋จธ์ง ์ ๋
/*+ NO_MERGE */
: ๋ทฐ ๋จธ์ง ๋ฐฉ์ง
/*+ PUSH_PRED */
: ์กฐ์ธ์กฐ๊ฑด PUSHDOWN ์ ๋
/*+ NO_PUSH_PRED */
: ์กฐ์ธ์กฐ๊ฑด PUSHDOWN ๋ฐฉ์ง
/*+ USE_CONCAT */
: OR ๋๋ IN-LIST์กฐ๊ฑด์ OR-EXPANSION์ผ๋ก ์ ๋
/*+ NO_EXPAND */
: OR ๋๋ IN-LIST ์กฐ๊ฑด์ ๋ํ OR-EXPANSION๋ฐฉ์ง
1-6. ๋ณ๋ ฌ ์ฒ๋ฆฌ Hint
/*+ PARALLEL */
: ํ
์ด๋ธ ์ค์บ, DML ๋ณ๋ ฌ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ ๋ ์ฌ์ฉ (๋จ์ผ ๋ํ ํ
์ด๋ธ ์ ๊ทผ ์ ์ฌ์ฉ, /*+ PARALLEL(T1 4)*/
)
/*+ PARALLEL_INDEX */
: ์ธ๋ฑ์ค ์ค์บ์ ๋ณ๋ ฌ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ๋๋ก ์ ๋
/*+ PQ_DISTRIBUTE */
: ๋ณ๋ ฌ ์ํ ์ ๋ฐ์ดํฐ ๋ถ๋ฐฐ ๋ฐฉ์ ๊ฒฐ์ (PQ_DISTRIBUTE(T1 HASH(--BUILD INPUT) HASH(--PROBE TABLE))
)
1-7. ์๋ธ์ฟผ๋ฆฌ ํฉํ ๋ง Hint
/*+ MATERIALIZE */
: WITH๋ฌธ์ผ๋ก ์ ์ํ ์งํฉ์ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์์ฑํ๋๋ก ์ ๋
/*+ INLINE */
: WITH๋ฌธ์ผ๋ก ์ ์ํ ์งํฉ์ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์์ฑํ์ง์๊ณ INLINE ์ฒ๋ฆฌํ๋๋ก ์ ๋
WITH /*+ MATERIALIZE */ T AS (SELECT ...)
WITH /*+ INLINE */ T AS (SELECT ...)
1-8. ์๋ธ์ฟผ๋ฆฌ Hint
/*+ UNNEST */
: FILTER ๋์ ๋ฐฉ์์ด ์๋ ์กฐ์ธ ๋์ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ๋ ค๋ฉด, ์๋ธ์ฟผ๋ฆฌ UNNESTING ์ ๋
/*+ NO_UNNEST */
: ์๋ธ์ฟผ๋ฆฌ๋ฅผ FILTER ๋์ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ๋ ค๋ฉด, ์๋ธ์ฟผ๋ฆฌ UNNESTING ๋ฐฉ์ง
/*+ NL_SJ */
: EXISTS or IN ์กฐ๊ฑด ์ฌ์ฉ ์ ์๋ธ์ฟผ๋ฆฌ์ UNNEST์ ํจ๊ป ์ฌ์ฉํ๋ฉด, NESTED LOOPS SEMI JOIN ์ฒ๋ฆฌ๋จ
/*+ HASH_SJ */
: EXISTS or IN ์กฐ๊ฑด ์ฌ์ฉ ์ ์๋ธ์ฟผ๋ฆฌ์ UNNEST์ ํจ๊ป ์ฌ์ฉํ๋ฉด, HASH SEMI JOIN ์ฒ๋ฆฌ๋จ (/*+ UNNEST HASH_AJ */
)
/*+ NL_AJ */
: NOT EXISTS or NOT IN ์กฐ๊ฑด ์ฌ์ฉ ์ ์๋ธ์ฟผ๋ฆฌ์ UNNEST์ ํจ๊ป ์ฌ์ฉํ๋ฉด, NESTED LOOPS ANTI JOIN ์ฒ๋ฆฌ๋จ
/*+ HASH_AJ */
: NOT EXISTS or NOT IN ์กฐ๊ฑด ์ฌ์ฉ ์ ์๋ธ์ฟผ๋ฆฌ์ UNNEST์ ํจ๊ป ์ฌ์ฉํ๋ฉด, HASH ANTI JOIN ์ฒ๋ฆฌ๋จ
/*+ ORDERED */
: FROM ์ ์ ๋์ด๋ ์์๋๋ก ์กฐ์ธ, ์๋ธ์ฟผ๋ฆฌ๊ฐ ์กด์ฌํ๋ค๋ฉด ์๋ธ์ฟผ๋ฆฌ๊ฐ ๊ฐ์ฅ ๋จผ์ ์ํ
/*+ QB_NAME */
: QUERY BLOCK์ ์ด๋ฆ์ ์ง์
/*+ SWAP_JOIN_INPUTS */
: HASH JOIN ์ ์กฐ์ธ ์์ ๋ณ๊ฒฝ ๊ฐ๋ฅ (๋ช
์๋ ํ
์ด๋ธ์ด BUILD ํ
์ด๋ธ์ด ๋จ)
/*+ NO_SWAP_JOIN_INPUTS */
: HASH JOIN์ ์กฐ์ธ ์์๊ฐ ๋ฐ๋๋ ๊ฒฝ์ฐ, ์ด๋ฅผ ๊ฐ์ ์ ์ผ๋ก ๋ณ๊ฒฝ๋์ง ๋ชปํ๋๋ก ์ ์ด
/*+ PUSH_SUBQ */
: ์๋ธ์ฟผ๋ฆฌ ๋จผ์ ์ํํ๋๋ก ์ ์ด (FILTER๋ก ์ํ๋จ)
-- ์๋ธ์ฟผ๋ฆฌ๋ถํฐ ์ํํ๋๋ก ์คํ๊ณํ ์ ์ด
-- ๋ณ๊ฒฝ๋๋ ๊ฒ์ ๋ง์ผ๋ ค๋ฉด NO_SWAP_JOIN_INPUTS ์ฌ์ฉ
SELECT COL1, COL2, COL3
FROM TBL_T1 T1
WHERE COL1 >= :B1
AND EXISTS (
SELECT /*+ UNNEST HASH_SJ SWAP_JOIN_INPUTS(T2)*/ 1
FROM TBL_T2 T2
WHERE T2.COL1 = T1.COL1
)
;
1-9. INSERT, UPDATE, DELETE Hint
/*+ APPNED */
: INSERT ์๋ ํฅ์
/*+ ENABLE_PARALLEL_DML PARALLEL(32) */
: UPDATE, DELETE ์๋ ํฅ์