일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- gradle
- RequestBody
- 프론트엔드
- aop
- vue life cycle
- github
- docker
- RequestParam
- maven
- fetch
- GIT
- 백엔드
- 빌드
- git push
- Spring AOP
- transaction
- 트랜잭션
- Vue.js
- VUE
- 도커
- axios
- Java
- PathVariable
- java version
- 비동기통신
- 개발자
- 자바 버전
- Today
- Total
미소의 세상
오라클 자주 사용하는 힌트 정리 (sql 튜닝) 본문
1. 최적화 목표
- /*+ALL_LOWS */: 전체 처리속도 최적화
-/*+FIRST_ROWS(N) */ : 최초 N건 응답속도 최적화
2.액세스 방식
- /*+FULL */ :인덱스 타지말고 바로 테이블 풀스캔으로 접근해라
- /*+INDEX */: 인덱스를 타라
- /*+INDEX_DESC */: 인덱스를 ORDER BY DESC 역순으로 타라 (시간, 결과값등 최근인것 혹은 MAX값 구할때 좋음)
- /*+INDEX_FFS */: INDEX FAST FULL SCAN으로 타라
- /*+INDEX_SS */: INDEX SKIP SCAN
3. 조인순서
- /*+ORDERED */: FROM절에 나열된 테이블 순서대로 조인해라
- /*+LEADING */: 내가 힌트절에 열거한 테이블 순서대로 조인해라 EX: /*+ LEADING (A B C)*/
-- A,B,C 순서대로 조인하세요
- /*+SWAP_JOIN_INPUTS */: 해시조인의 경우, BUILD INPUT를 명시적으로 선택
EX: /*+ SWAP_JOIN_INPUTS(A)*/
--해시조인의경우 BUILD INPUT과 PROBE에 대한 순서를 정할 수 있다.
4. 조인방식
- /*+USE_NL */ :NL(NESTED LOOP - 중첩루프)방식 조인 유도
- /*+USE_MERGE */: 소트머지 조인으로 유도
- /*+USE_HASH */: 해시조인으로 유도
-/*+NL_SJ */: NL SEMI조인으로 유도
-/*+MERGE_SJ */: 소트머지 세미조인으로 유도
-/*+HASH_SJ */: 해시 세미조인으로 유도
5. 서브쿼리팩토링
- /*+MATERIALIZE */: WITH문으로 정의한 집합을 물리적으로 생성하도록 유도
EX) WITH /*+ MATERIALIZE*/ T AS (SELECT ...)
- /*+INLINE */: WITH문으로 정의한 집합을 물리적으로 생성하지않고 INLINE 처리하도록 유도
EX)WITH /*+ INLINE*/ T AS (SELECT ...)
6.쿼리변환
- /*+ MEERGE */: 뷰 머징 유도
- /*+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방지
7.병렬처리
- /*+PARALLEL */: 테이블 스캔, DML 병렬방식으로 처리하도록 할때 사용.. 단일 대형 테이블의 접근시 정말 많이 쓴다.
EX) /*+ PARALLEL(T1 4)*/
- /*+PARALLEL_INDEX */: 인덱스 스캔을 병렬방식으로 처리하도록 유도
- /*+PQ_DISTRIBUTE */: 병렬수행시 데이터 분배방식 결정
EX) PQ_DISTRIBUTE(T1 HASH(--BUILD INPUT) HASH(--PROBE TABLE))
8. 그외 기타
- /*+APPEND*/: DIRECT PATH INSERT유도로 INSERT 문에 주로 많이 쓴다
- /*+DRIVING_SITE */: DB LINK REMOTE쿼리에 대한 최적화 및 실행 주체 지정 (LOCAL 또는 REMOTE)
- /*+PUSH_SUBQ */: 서브쿼리를 가급적 빨리 필터링하도록 유도
- /*+NO_PUSH_SUBQ */: 서브쿼리를 가급적 늦게 필터링 하도록 유도
'SQL' 카테고리의 다른 글
프로시저의 장단점 (0) | 2022.05.11 |
---|---|
Mybatis #, $ 차이 (0) | 2022.05.04 |
서브쿼리의 종류 (0) | 2022.04.15 |
Mybatis와 비교한 JPA 장단점 (0) | 2022.04.03 |
오라클 MYSQL 문법 차이 (0) | 2022.03.02 |