SlideShare a Scribd company logo
1 of 7
Oracle Hint, Tuning
실행계획 SQL 연산
(HASH SEMI-JOIN)
Oracle Hint, Tuning_ 실행계획 SQL 연산
3.5 실행계획 SQL 연산
: HASH SEMI-JOIN
세미 조인은 보통 EXISTS를 사용하는 서브쿼리의 형태로 나타나며 이러한 경우
서브 쿼리에 인덱스가 존재하지 않는다면 상당히 비효율적인데 SEMI-JOIN이 일어나
도록 유도한다면 성능의 향상을 꽤 할 수 있다. 즉 인덱스 없이 EXISTS를 사용하는
쿼리라면 HASH_SJ or MERGE_SJ or NL_SJ 힌트를 이용해서 세미조인이 일어나도록
푸는 것이 좋다.
Oracle Hint, Tuning_ 실행계획 SQL 연산
-- RBO로 실행하면 FILTER 연산으로 비효율적인 실행계획이 만들어 진다. FILTER연산은 메인쿼리의 로우를 한건
읽을 때 마다 서브쿼리를 실행시키는 연산이다. RULE힌트의 경우 바깥쪽 메인쿼리의 MYEMP1 테이블을 FULL
TABLE SCAN 한다.
SQL> SELECT /*+ RULE */ COUNT(*)
FROM MYEMP1 E
WHERE EXISTS (
SELECT 1 FROM MYEMP1_OLD EO
WHERE E.EMPNO = EO.EMPNO
);
COUNT(*)
----------
1666667
경 과: 00:00:23.86
Execution Plan
---------------------------------------------------------------
| Id | Operation
---------------------------------------------------------------
| 0 | SELECT STATEMENT
| 1 | SORT AGGREGATE
|* 2 | FILTER
| 3 | TABLE ACCESS FULL | MYEMP1
|* 4 | INDEX UNIQUE SCAN | PK_MYEMP1_OLD
---------------------------------------------------------------
Oracle Hint, Tuning_ 실행계획 SQL 연산
Statistics
----------------------------------------------------------
1 recursive calls
0 db block gets
10873520 consistent gets
-- 아래는 NO_UNNEST 힌트를 사용하여 CBO로 돌지만 서브쿼리를 조인으로 풀지말라고 했다. 바깥쪽 메인쿼리
의 MYEMP1 테이블의 PK_MYEMP1을 이용하여 INDEX FAST FULL SCAN 했다. 당연히 위에서 RULE 힌트를 사
용한 쿼리보다 읽어들인 블록수가 적으니 쿼리 수행시간도 좋다.
SQL> SELECT COUNT(*)
FROM MYEMP1 E
WHERE EXISTS (
SELECT /*+ no_unnest */ 1 FROM MYEMP1_OLD EO
WHERE E.EMPNO = EO.EMPNO
);
COUNT(*)
-------------
1666667
경 과: 00:00:4.05
Oracle Hint, Tuning_ 실행계획 SQL 연산
----------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
----------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 13 | 16M (1) | 55:40:12 |
| 1 | SORT AGGREGATE | | 1 | 13 | | |
|* 2 | FILTER | | | | | |
| 3 | INDEX FAST FULL SCAN| PK_MYEMP1 | 8488K| 105M| 5577 (1) | 00:01:07 |
|* 4 | INDEX UNIQUE SCAN | PK_MYEMP1_OLD | 1 | 6 | 2 (0 )| 00:00:01 |
----------------------------------------------------------------------------------------------------------
Statistics
----------------------------------------------------------
7 recursive calls
0 db block gets
10316854 consistent gets
-- 이번에는 HASH SEMI JOIN이 일어나도록 힌트를 사용해 보자. 물론 CBO 모드에서는 힌트를 사용하지 않더라
도 대부분 HASH SEMI JOIN을 이용하는 실행계획을 만들어 낼 것이다.
SQL> SELECT COUNT(*)
FROM MYEMP1 E
WHERE EXISTS (
SELECT /*+ HASH_SJ */ 1 FROM MYEMP1_OLD EO
WHERE E.EMPNO = EO.EMPNO
);
Oracle Hint, Tuning_ 실행계획 SQL 연산
COUNT(*)
------------
1666667
경 과: 00:00:07.17
Execution Plan
------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time |
------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 12 | | 17257 (2)| 00:03:28 |
| 1 | SORT AGGREGATE | | 1 | 12 | | | |
|* 2 | HASH JOIN RIGHT SEMI | | 1666K| 19M| 28M| 17257 (2)| 00:03:28 |
| 3 | INDEX FAST FULL SCAN | PK_MYEMP1_OLD| 1666K| 9765K| | 1441 (2)| 00:00:18 |
| 4 | INDEX FAST FULL SCAN | PK_MYEMP1 | 10M| 57M| | 5726 (2)| 00:01:09 |
-----------------------------------------------------------------------------------------------------------------
Oracle Hint, Tuning_ 실행계획 SQL 연산
-- 이번에는 중첩 루프 세미조인(NESTED LOOP SEMI JOIN)을 이용하는 실행계획이 수립되도록 NL_SJ 힌트를
사용해 보자.
SQL> SELECT COUNT(*)
FROM MYEMP1 E
WHERE EXISTS (
SELECT /*+ NL_SJ */ 1 FROM MYEMP1_OLD EO
WHERE E.EMPNO = EO.EMPNO
);
COUNT(*)
----------
1666667
경 과: 00:00:06.07
Execution Plan
-------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 12 | 10M (1)| 33:22:25 |
| 1 | SORT AGGREGATE | | 1 | 12 | | |
| 2 | NESTED LOOPS SEMI | | 1666K| 19M| 10M (1)| 33:22:25 |
| 3 | INDEX FAST FULL SCAN| PK_MYEMP1 | 10M| 57M| 5726 (2)| 00:01:09 |
|* 4 | INDEX UNIQUE SCAN | PK_MYEMP1_OLD | 277K| 1627K| 1 (0)| 00:00:01 |
-------------------------------------------------------------------------------------------------------

More Related Content

What's hot

#25.SQL초보에서 Schema Objects까지_구로IT학원/국비지원IT학원추천/구로디지털단지IT학원/재직자환급교육추천
#25.SQL초보에서 Schema Objects까지_구로IT학원/국비지원IT학원추천/구로디지털단지IT학원/재직자환급교육추천#25.SQL초보에서 Schema Objects까지_구로IT학원/국비지원IT학원추천/구로디지털단지IT학원/재직자환급교육추천
#25.SQL초보에서 Schema Objects까지_구로IT학원/국비지원IT학원추천/구로디지털단지IT학원/재직자환급교육추천탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[2015-06-19] Oracle 성능 최적화 및 품질 고도화 2
[2015-06-19] Oracle 성능 최적화 및 품질 고도화 2[2015-06-19] Oracle 성능 최적화 및 품질 고도화 2
[2015-06-19] Oracle 성능 최적화 및 품질 고도화 2Seok-joon Yun
 
[2015-06-26] Oracle 성능 최적화 및 품질 고도화 3
[2015-06-26] Oracle 성능 최적화 및 품질 고도화 3[2015-06-26] Oracle 성능 최적화 및 품질 고도화 3
[2015-06-26] Oracle 성능 최적화 및 품질 고도화 3Seok-joon Yun
 
#6.SQL초보에서 Schema Objects까지_구로IT학원/오라클교육/자바교육/국비지원/재직자환급교육/내일배움카드/사업주위탁
#6.SQL초보에서 Schema Objects까지_구로IT학원/오라클교육/자바교육/국비지원/재직자환급교육/내일배움카드/사업주위탁#6.SQL초보에서 Schema Objects까지_구로IT학원/오라클교육/자바교육/국비지원/재직자환급교육/내일배움카드/사업주위탁
#6.SQL초보에서 Schema Objects까지_구로IT학원/오라클교육/자바교육/국비지원/재직자환급교육/내일배움카드/사업주위탁탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[오라클교육/SQL교육/IT교육/실무중심교육학원추천_탑크리에듀]#4.SQL초보에서 Schema Objectes까지
[오라클교육/SQL교육/IT교육/실무중심교육학원추천_탑크리에듀]#4.SQL초보에서 Schema Objectes까지[오라클교육/SQL교육/IT교육/실무중심교육학원추천_탑크리에듀]#4.SQL초보에서 Schema Objectes까지
[오라클교육/SQL교육/IT교육/실무중심교육학원추천_탑크리에듀]#4.SQL초보에서 Schema Objectes까지탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[2015-06-12] Oracle 성능 최적화 및 품질 고도화 1
[2015-06-12] Oracle 성능 최적화 및 품질 고도화 1[2015-06-12] Oracle 성능 최적화 및 품질 고도화 1
[2015-06-12] Oracle 성능 최적화 및 품질 고도화 1Seok-joon Yun
 
[구로IT학원추천/구로디지털단지IT학원/국비지원IT학원/재직자/구직자환급교육]#9.SQL초보에서 Schema Objects까지
[구로IT학원추천/구로디지털단지IT학원/국비지원IT학원/재직자/구직자환급교육]#9.SQL초보에서 Schema Objects까지[구로IT학원추천/구로디지털단지IT학원/국비지원IT학원/재직자/구직자환급교육]#9.SQL초보에서 Schema Objects까지
[구로IT학원추천/구로디지털단지IT학원/국비지원IT학원/재직자/구직자환급교육]#9.SQL초보에서 Schema Objects까지탑크리에듀(구로디지털단지역3번출구 2분거리)
 

What's hot (20)

3.1 실행계획 sql 연산 (and equal)
3.1 실행계획 sql 연산 (and equal)3.1 실행계획 sql 연산 (and equal)
3.1 실행계획 sql 연산 (and equal)
 
Sql기초강좌_select기본
Sql기초강좌_select기본Sql기초강좌_select기본
Sql기초강좌_select기본
 
1.7 튜닝의도구 sql autorace
1.7 튜닝의도구 sql autorace1.7 튜닝의도구 sql autorace
1.7 튜닝의도구 sql autorace
 
Sql기초강좌2_SET AUTOTRACE_SQL교육
Sql기초강좌2_SET AUTOTRACE_SQL교육Sql기초강좌2_SET AUTOTRACE_SQL교육
Sql기초강좌2_SET AUTOTRACE_SQL교육
 
Sql 산술표현식
Sql 산술표현식Sql 산술표현식
Sql 산술표현식
 
#25.SQL초보에서 Schema Objects까지_구로IT학원/국비지원IT학원추천/구로디지털단지IT학원/재직자환급교육추천
#25.SQL초보에서 Schema Objects까지_구로IT학원/국비지원IT학원추천/구로디지털단지IT학원/재직자환급교육추천#25.SQL초보에서 Schema Objects까지_구로IT학원/국비지원IT학원추천/구로디지털단지IT학원/재직자환급교육추천
#25.SQL초보에서 Schema Objects까지_구로IT학원/국비지원IT학원추천/구로디지털단지IT학원/재직자환급교육추천
 
5.2 비트맵 인덱스
5.2 비트맵 인덱스5.2 비트맵 인덱스
5.2 비트맵 인덱스
 
1.8 튜닝의도구 dbms xplan
1.8 튜닝의도구 dbms xplan1.8 튜닝의도구 dbms xplan
1.8 튜닝의도구 dbms xplan
 
[2015-06-19] Oracle 성능 최적화 및 품질 고도화 2
[2015-06-19] Oracle 성능 최적화 및 품질 고도화 2[2015-06-19] Oracle 성능 최적화 및 품질 고도화 2
[2015-06-19] Oracle 성능 최적화 및 품질 고도화 2
 
2.1 optimizer mode를 변경하는 힌트(rule)
2.1 optimizer mode를 변경하는 힌트(rule)2.1 optimizer mode를 변경하는 힌트(rule)
2.1 optimizer mode를 변경하는 힌트(rule)
 
[2015-06-26] Oracle 성능 최적화 및 품질 고도화 3
[2015-06-26] Oracle 성능 최적화 및 품질 고도화 3[2015-06-26] Oracle 성능 최적화 및 품질 고도화 3
[2015-06-26] Oracle 성능 최적화 및 품질 고도화 3
 
#6.SQL초보에서 Schema Objects까지_구로IT학원/오라클교육/자바교육/국비지원/재직자환급교육/내일배움카드/사업주위탁
#6.SQL초보에서 Schema Objects까지_구로IT학원/오라클교육/자바교육/국비지원/재직자환급교육/내일배움카드/사업주위탁#6.SQL초보에서 Schema Objects까지_구로IT학원/오라클교육/자바교육/국비지원/재직자환급교육/내일배움카드/사업주위탁
#6.SQL초보에서 Schema Objects까지_구로IT학원/오라클교육/자바교육/국비지원/재직자환급교육/내일배움카드/사업주위탁
 
Sql 합성연산자
Sql 합성연산자Sql 합성연산자
Sql 합성연산자
 
[오라클교육/SQL교육/IT교육/실무중심교육학원추천_탑크리에듀]#4.SQL초보에서 Schema Objectes까지
[오라클교육/SQL교육/IT교육/실무중심교육학원추천_탑크리에듀]#4.SQL초보에서 Schema Objectes까지[오라클교육/SQL교육/IT교육/실무중심교육학원추천_탑크리에듀]#4.SQL초보에서 Schema Objectes까지
[오라클교육/SQL교육/IT교육/실무중심교육학원추천_탑크리에듀]#4.SQL초보에서 Schema Objectes까지
 
1.6 cursor sharing 파라미터
1.6 cursor sharing 파라미터1.6 cursor sharing 파라미터
1.6 cursor sharing 파라미터
 
[2015-06-12] Oracle 성능 최적화 및 품질 고도화 1
[2015-06-12] Oracle 성능 최적화 및 품질 고도화 1[2015-06-12] Oracle 성능 최적화 및 품질 고도화 1
[2015-06-12] Oracle 성능 최적화 및 품질 고도화 1
 
[구로IT학원추천/구로디지털단지IT학원/국비지원IT학원/재직자/구직자환급교육]#9.SQL초보에서 Schema Objects까지
[구로IT학원추천/구로디지털단지IT학원/국비지원IT학원/재직자/구직자환급교육]#9.SQL초보에서 Schema Objects까지[구로IT학원추천/구로디지털단지IT학원/국비지원IT학원/재직자/구직자환급교육]#9.SQL초보에서 Schema Objects까지
[구로IT학원추천/구로디지털단지IT학원/국비지원IT학원/재직자/구직자환급교육]#9.SQL초보에서 Schema Objects까지
 
1.5 literal sql & bind variable sql
1.5 literal sql & bind variable sql1.5 literal sql & bind variable sql
1.5 literal sql & bind variable sql
 
집합함수(1)
집합함수(1)집합함수(1)
집합함수(1)
 
집합함수(2)
집합함수(2)집합함수(2)
집합함수(2)
 

Similar to 3.5 실행계획 SQL 연산 (HASH SEMI-JOIN)

SQL Profile을 이용한 SQL Plan 변경_Wh oracle
SQL Profile을 이용한 SQL Plan 변경_Wh oracleSQL Profile을 이용한 SQL Plan 변경_Wh oracle
SQL Profile을 이용한 SQL Plan 변경_Wh oracle엑셈
 
Database 튜닝 교육 110124
Database 튜닝 교육 110124Database 튜닝 교육 110124
Database 튜닝 교육 110124한 경만
 
배치 프로그램에서 튜닝대상 SQL 추출하기_Wh oracle
배치 프로그램에서 튜닝대상 SQL 추출하기_Wh oracle배치 프로그램에서 튜닝대상 SQL 추출하기_Wh oracle
배치 프로그램에서 튜닝대상 SQL 추출하기_Wh oracle엑셈
 
MySQL 실행계획
MySQL 실행계획MySQL 실행계획
MySQL 실행계획Wonjun Hwang
 
Bind Peeking 한계에 따른 Adaptive Cursor Sharing 등장_Wh oracle
Bind Peeking 한계에 따른 Adaptive Cursor Sharing 등장_Wh oracleBind Peeking 한계에 따른 Adaptive Cursor Sharing 등장_Wh oracle
Bind Peeking 한계에 따른 Adaptive Cursor Sharing 등장_Wh oracle엑셈
 
[2015-07-10-윤석준] Oracle 성능 관리 & v$sysstat
[2015-07-10-윤석준] Oracle 성능 관리 & v$sysstat[2015-07-10-윤석준] Oracle 성능 관리 & v$sysstat
[2015-07-10-윤석준] Oracle 성능 관리 & v$sysstatSeok-joon Yun
 
ecdevday8 웹개발자의 약한고리 SQL 뛰어넘기
ecdevday8 웹개발자의 약한고리 SQL 뛰어넘기ecdevday8 웹개발자의 약한고리 SQL 뛰어넘기
ecdevday8 웹개발자의 약한고리 SQL 뛰어넘기Kenu, GwangNam Heo
 
Result Cache 동작원리 및 활용방안_Wh oracle
Result Cache 동작원리 및 활용방안_Wh oracleResult Cache 동작원리 및 활용방안_Wh oracle
Result Cache 동작원리 및 활용방안_Wh oracle엑셈
 
SQL PlAN MANAGEMENT 활용_Wh oracle
SQL PlAN MANAGEMENT 활용_Wh oracleSQL PlAN MANAGEMENT 활용_Wh oracle
SQL PlAN MANAGEMENT 활용_Wh oracle엑셈
 
#20.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#20.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...#20.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#20.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...탑크리에듀(구로디지털단지역3번출구 2분거리)
 
효율적인Sql작성방법 2주차
효율적인Sql작성방법 2주차효율적인Sql작성방법 2주차
효율적인Sql작성방법 2주차희동 강
 
[2013 CodeEngn Conference 09] wh1ant - various tricks for linux remote exploits
[2013 CodeEngn Conference 09] wh1ant - various tricks for linux remote exploits[2013 CodeEngn Conference 09] wh1ant - various tricks for linux remote exploits
[2013 CodeEngn Conference 09] wh1ant - various tricks for linux remote exploitsGangSeok Lee
 
Oracle Query Optimizer 관련 Parameter_OracleParameter
Oracle Query Optimizer 관련 Parameter_OracleParameterOracle Query Optimizer 관련 Parameter_OracleParameter
Oracle Query Optimizer 관련 Parameter_OracleParameter엑셈
 
효율적인Sql작성방법 3주차
효율적인Sql작성방법 3주차효율적인Sql작성방법 3주차
효율적인Sql작성방법 3주차희동 강
 
(SQL힌트튜닝,온라인화상교육#3회차,강의자료,12/22)중첩루프조인개요,USE_NL, ORDERED, USE_NL_WITH_INDEX_오...
(SQL힌트튜닝,온라인화상교육#3회차,강의자료,12/22)중첩루프조인개요,USE_NL, ORDERED, USE_NL_WITH_INDEX_오...(SQL힌트튜닝,온라인화상교육#3회차,강의자료,12/22)중첩루프조인개요,USE_NL, ORDERED, USE_NL_WITH_INDEX_오...
(SQL힌트튜닝,온라인화상교육#3회차,강의자료,12/22)중첩루프조인개요,USE_NL, ORDERED, USE_NL_WITH_INDEX_오...탑크리에듀(구로디지털단지역3번출구 2분거리)
 

Similar to 3.5 실행계획 SQL 연산 (HASH SEMI-JOIN) (20)

SQL Profile을 이용한 SQL Plan 변경_Wh oracle
SQL Profile을 이용한 SQL Plan 변경_Wh oracleSQL Profile을 이용한 SQL Plan 변경_Wh oracle
SQL Profile을 이용한 SQL Plan 변경_Wh oracle
 
6.4 hints for access paths(index)
6.4 hints for access paths(index)6.4 hints for access paths(index)
6.4 hints for access paths(index)
 
Database 튜닝 교육 110124
Database 튜닝 교육 110124Database 튜닝 교육 110124
Database 튜닝 교육 110124
 
배치 프로그램에서 튜닝대상 SQL 추출하기_Wh oracle
배치 프로그램에서 튜닝대상 SQL 추출하기_Wh oracle배치 프로그램에서 튜닝대상 SQL 추출하기_Wh oracle
배치 프로그램에서 튜닝대상 SQL 추출하기_Wh oracle
 
5.3 비트맵 조인 인덱스
5.3 비트맵 조인 인덱스5.3 비트맵 조인 인덱스
5.3 비트맵 조인 인덱스
 
MySQL 실행계획
MySQL 실행계획MySQL 실행계획
MySQL 실행계획
 
Bind Peeking 한계에 따른 Adaptive Cursor Sharing 등장_Wh oracle
Bind Peeking 한계에 따른 Adaptive Cursor Sharing 등장_Wh oracleBind Peeking 한계에 따른 Adaptive Cursor Sharing 등장_Wh oracle
Bind Peeking 한계에 따른 Adaptive Cursor Sharing 등장_Wh oracle
 
6.2 hints for access paths(cluster)
6.2 hints for access paths(cluster)6.2 hints for access paths(cluster)
6.2 hints for access paths(cluster)
 
[2015-07-10-윤석준] Oracle 성능 관리 & v$sysstat
[2015-07-10-윤석준] Oracle 성능 관리 & v$sysstat[2015-07-10-윤석준] Oracle 성능 관리 & v$sysstat
[2015-07-10-윤석준] Oracle 성능 관리 & v$sysstat
 
1.11 실행계획 해석 predicate
1.11 실행계획 해석 predicate1.11 실행계획 해석 predicate
1.11 실행계획 해석 predicate
 
ecdevday8 웹개발자의 약한고리 SQL 뛰어넘기
ecdevday8 웹개발자의 약한고리 SQL 뛰어넘기ecdevday8 웹개발자의 약한고리 SQL 뛰어넘기
ecdevday8 웹개발자의 약한고리 SQL 뛰어넘기
 
Sql 조건연산자를 이용한 조건검색(1)
Sql 조건연산자를 이용한 조건검색(1)Sql 조건연산자를 이용한 조건검색(1)
Sql 조건연산자를 이용한 조건검색(1)
 
Result Cache 동작원리 및 활용방안_Wh oracle
Result Cache 동작원리 및 활용방안_Wh oracleResult Cache 동작원리 및 활용방안_Wh oracle
Result Cache 동작원리 및 활용방안_Wh oracle
 
SQL PlAN MANAGEMENT 활용_Wh oracle
SQL PlAN MANAGEMENT 활용_Wh oracleSQL PlAN MANAGEMENT 활용_Wh oracle
SQL PlAN MANAGEMENT 활용_Wh oracle
 
#20.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#20.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...#20.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#20.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
 
효율적인Sql작성방법 2주차
효율적인Sql작성방법 2주차효율적인Sql작성방법 2주차
효율적인Sql작성방법 2주차
 
[2013 CodeEngn Conference 09] wh1ant - various tricks for linux remote exploits
[2013 CodeEngn Conference 09] wh1ant - various tricks for linux remote exploits[2013 CodeEngn Conference 09] wh1ant - various tricks for linux remote exploits
[2013 CodeEngn Conference 09] wh1ant - various tricks for linux remote exploits
 
Oracle Query Optimizer 관련 Parameter_OracleParameter
Oracle Query Optimizer 관련 Parameter_OracleParameterOracle Query Optimizer 관련 Parameter_OracleParameter
Oracle Query Optimizer 관련 Parameter_OracleParameter
 
효율적인Sql작성방법 3주차
효율적인Sql작성방법 3주차효율적인Sql작성방법 3주차
효율적인Sql작성방법 3주차
 
(SQL힌트튜닝,온라인화상교육#3회차,강의자료,12/22)중첩루프조인개요,USE_NL, ORDERED, USE_NL_WITH_INDEX_오...
(SQL힌트튜닝,온라인화상교육#3회차,강의자료,12/22)중첩루프조인개요,USE_NL, ORDERED, USE_NL_WITH_INDEX_오...(SQL힌트튜닝,온라인화상교육#3회차,강의자료,12/22)중첩루프조인개요,USE_NL, ORDERED, USE_NL_WITH_INDEX_오...
(SQL힌트튜닝,온라인화상교육#3회차,강의자료,12/22)중첩루프조인개요,USE_NL, ORDERED, USE_NL_WITH_INDEX_오...
 

More from 탑크리에듀(구로디지털단지역3번출구 2분거리)

[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)탑크리에듀(구로디지털단지역3번출구 2분거리)
 
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...탑크리에듀(구로디지털단지역3번출구 2분거리)
 
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...탑크리에듀(구로디지털단지역3번출구 2분거리)
 
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]탑크리에듀(구로디지털단지역3번출구 2분거리)
 
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]탑크리에듀(구로디지털단지역3번출구 2분거리)
 

More from 탑크리에듀(구로디지털단지역3번출구 2분거리) (20)

자마린.안드로이드 기본 내장레이아웃(Built-In List Item Layouts)
자마린.안드로이드 기본 내장레이아웃(Built-In List Item Layouts)자마린.안드로이드 기본 내장레이아웃(Built-In List Item Layouts)
자마린.안드로이드 기본 내장레이아웃(Built-In List Item Layouts)
 
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
 
자마린 iOS 멀티화면 컨트롤러_네비게이션 컨트롤러, 루트 뷰 컨트롤러
자마린 iOS 멀티화면 컨트롤러_네비게이션 컨트롤러, 루트 뷰 컨트롤러자마린 iOS 멀티화면 컨트롤러_네비게이션 컨트롤러, 루트 뷰 컨트롤러
자마린 iOS 멀티화면 컨트롤러_네비게이션 컨트롤러, 루트 뷰 컨트롤러
 
[IT교육/IT학원]Develope를 위한 IT실무교육
[IT교육/IT학원]Develope를 위한 IT실무교육[IT교육/IT학원]Develope를 위한 IT실무교육
[IT교육/IT학원]Develope를 위한 IT실무교육
 
[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)
[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)
[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)
 
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
 
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
 
[정보처리기사자격증학원]정보처리기사 취득 양성과정(국비무료 자격증과정)
[정보처리기사자격증학원]정보처리기사 취득 양성과정(국비무료 자격증과정)[정보처리기사자격증학원]정보처리기사 취득 양성과정(국비무료 자격증과정)
[정보처리기사자격증학원]정보처리기사 취득 양성과정(국비무료 자격증과정)
 
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
 
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...
 
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
 
[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios 3.3.5 추가적인 사항
[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios  3.3.5 추가적인 사항[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios  3.3.5 추가적인 사항
[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios 3.3.5 추가적인 사항
 
3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...
3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...
3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...
 
5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)
5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)
5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)
 
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...
 
(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌
(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌
(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌
 
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
 
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
 
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...
 
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
 

3.5 실행계획 SQL 연산 (HASH SEMI-JOIN)

  • 1. Oracle Hint, Tuning 실행계획 SQL 연산 (HASH SEMI-JOIN)
  • 2. Oracle Hint, Tuning_ 실행계획 SQL 연산 3.5 실행계획 SQL 연산 : HASH SEMI-JOIN 세미 조인은 보통 EXISTS를 사용하는 서브쿼리의 형태로 나타나며 이러한 경우 서브 쿼리에 인덱스가 존재하지 않는다면 상당히 비효율적인데 SEMI-JOIN이 일어나 도록 유도한다면 성능의 향상을 꽤 할 수 있다. 즉 인덱스 없이 EXISTS를 사용하는 쿼리라면 HASH_SJ or MERGE_SJ or NL_SJ 힌트를 이용해서 세미조인이 일어나도록 푸는 것이 좋다.
  • 3. Oracle Hint, Tuning_ 실행계획 SQL 연산 -- RBO로 실행하면 FILTER 연산으로 비효율적인 실행계획이 만들어 진다. FILTER연산은 메인쿼리의 로우를 한건 읽을 때 마다 서브쿼리를 실행시키는 연산이다. RULE힌트의 경우 바깥쪽 메인쿼리의 MYEMP1 테이블을 FULL TABLE SCAN 한다. SQL> SELECT /*+ RULE */ COUNT(*) FROM MYEMP1 E WHERE EXISTS ( SELECT 1 FROM MYEMP1_OLD EO WHERE E.EMPNO = EO.EMPNO ); COUNT(*) ---------- 1666667 경 과: 00:00:23.86 Execution Plan --------------------------------------------------------------- | Id | Operation --------------------------------------------------------------- | 0 | SELECT STATEMENT | 1 | SORT AGGREGATE |* 2 | FILTER | 3 | TABLE ACCESS FULL | MYEMP1 |* 4 | INDEX UNIQUE SCAN | PK_MYEMP1_OLD ---------------------------------------------------------------
  • 4. Oracle Hint, Tuning_ 실행계획 SQL 연산 Statistics ---------------------------------------------------------- 1 recursive calls 0 db block gets 10873520 consistent gets -- 아래는 NO_UNNEST 힌트를 사용하여 CBO로 돌지만 서브쿼리를 조인으로 풀지말라고 했다. 바깥쪽 메인쿼리 의 MYEMP1 테이블의 PK_MYEMP1을 이용하여 INDEX FAST FULL SCAN 했다. 당연히 위에서 RULE 힌트를 사 용한 쿼리보다 읽어들인 블록수가 적으니 쿼리 수행시간도 좋다. SQL> SELECT COUNT(*) FROM MYEMP1 E WHERE EXISTS ( SELECT /*+ no_unnest */ 1 FROM MYEMP1_OLD EO WHERE E.EMPNO = EO.EMPNO ); COUNT(*) ------------- 1666667 경 과: 00:00:4.05
  • 5. Oracle Hint, Tuning_ 실행계획 SQL 연산 ---------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ---------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 13 | 16M (1) | 55:40:12 | | 1 | SORT AGGREGATE | | 1 | 13 | | | |* 2 | FILTER | | | | | | | 3 | INDEX FAST FULL SCAN| PK_MYEMP1 | 8488K| 105M| 5577 (1) | 00:01:07 | |* 4 | INDEX UNIQUE SCAN | PK_MYEMP1_OLD | 1 | 6 | 2 (0 )| 00:00:01 | ---------------------------------------------------------------------------------------------------------- Statistics ---------------------------------------------------------- 7 recursive calls 0 db block gets 10316854 consistent gets -- 이번에는 HASH SEMI JOIN이 일어나도록 힌트를 사용해 보자. 물론 CBO 모드에서는 힌트를 사용하지 않더라 도 대부분 HASH SEMI JOIN을 이용하는 실행계획을 만들어 낼 것이다. SQL> SELECT COUNT(*) FROM MYEMP1 E WHERE EXISTS ( SELECT /*+ HASH_SJ */ 1 FROM MYEMP1_OLD EO WHERE E.EMPNO = EO.EMPNO );
  • 6. Oracle Hint, Tuning_ 실행계획 SQL 연산 COUNT(*) ------------ 1666667 경 과: 00:00:07.17 Execution Plan ------------------------------------------------------------------------------------------------------------------ | Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time | ------------------------------------------------------------------------------------------------------------------ | 0 | SELECT STATEMENT | | 1 | 12 | | 17257 (2)| 00:03:28 | | 1 | SORT AGGREGATE | | 1 | 12 | | | | |* 2 | HASH JOIN RIGHT SEMI | | 1666K| 19M| 28M| 17257 (2)| 00:03:28 | | 3 | INDEX FAST FULL SCAN | PK_MYEMP1_OLD| 1666K| 9765K| | 1441 (2)| 00:00:18 | | 4 | INDEX FAST FULL SCAN | PK_MYEMP1 | 10M| 57M| | 5726 (2)| 00:01:09 | -----------------------------------------------------------------------------------------------------------------
  • 7. Oracle Hint, Tuning_ 실행계획 SQL 연산 -- 이번에는 중첩 루프 세미조인(NESTED LOOP SEMI JOIN)을 이용하는 실행계획이 수립되도록 NL_SJ 힌트를 사용해 보자. SQL> SELECT COUNT(*) FROM MYEMP1 E WHERE EXISTS ( SELECT /*+ NL_SJ */ 1 FROM MYEMP1_OLD EO WHERE E.EMPNO = EO.EMPNO ); COUNT(*) ---------- 1666667 경 과: 00:00:06.07 Execution Plan ------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 12 | 10M (1)| 33:22:25 | | 1 | SORT AGGREGATE | | 1 | 12 | | | | 2 | NESTED LOOPS SEMI | | 1666K| 19M| 10M (1)| 33:22:25 | | 3 | INDEX FAST FULL SCAN| PK_MYEMP1 | 10M| 57M| 5726 (2)| 00:01:09 | |* 4 | INDEX UNIQUE SCAN | PK_MYEMP1_OLD | 277K| 1627K| 1 (0)| 00:00:01 | -------------------------------------------------------------------------------------------------------