SlideShare a Scribd company logo
Oracle Hint, Tuning
Optimizer Mode를
변경하는 힌트(Rule)
Oracle Hint, Tuning_ Optimizer Mode 변경 힌트
2.1 Optimizer Mode를 변경하는 힌트
규칙 기반 옵티마이저(Rule-Based Optimizer)로 동작하여 실행 계획을 세우도록 하는 힌트인데 이
경우 테이블이나 인덱스의 통계 정보가 있다고 하더라도 무시하고 사용하지 않으며 규칙에 기반한
실행 계획을 세우게 된다.
옵티마이저는 순위가 매겨진 오퍼레이션에 근거하여 실행 계획을 세우며 순위가 높은 것이 우선 적
용된다.
만약 SQL 문장에서 /*+ RULE INDEX(emp idx_ename) */ 와 같이 RULE 힌트와 다른 힌트가 같
이 사용된다면 RULE 힌트만 적용되므로 주의하자.
Oracle Hint, Tuning_ Optimizer Mode 변경 힌트
EMP 테이블의 DEPTNO 칼럼에 현재 인덱스가 생성되지 않은 상태이다. RBO에서 조인시 칼럼
인덱스가 없는쪽이 드라이빙 테이블이 되니 확인해 보라.
-- EMP테이블의 DEPTNO 칼럼에 인덱스가 있다면 옵티마이저가 사용하지 못하도록 숨기자.
SQL>ALTER INDEX IDX_EMP_DEPTNO INVISIBLE;
SQL>SELECT /*+ RULE */
e.empno,
e.ename,
d.dname
FROM emp e, dept d
WHERE e.deptno = d.deptno
Execution Plan
---------------------------------------------------------------
Operation Object Name Rows Bytes Cost
SELECT STATEMENT Optimizer Mode=HINT: RULE
NESTED LOOPS
TABLE ACCESS FULL EMP  조인의 경우 실행계획상 같은 레벨이라면 위에
TABLE ACCESS BY INDEX ROWID DEPT 있는 것이 드라이빙 테이블이다.
INDEX UNIQUE SCAN PK_DEPT
Oracle Hint, Tuning_ Optimizer Mode 변경 힌트
SQL> SELECT /*+ RULE */
e.empno,
e.ename,
d.dname
FROM emp e, dept d
WHERE to_char(e.deptno) = to_char(d.deptno)
Execution Plan
-------------------------------------------------------------------
Operation Object Name Rows Bytes Cost
SELECT STATEMENT Optimizer Mode=HINT: RULE
MERGE JOIN
SORT JOIN
TABLE ACCESS FULL DEPT
SORT JOIN
TABLE ACCESS FULL EMP
이번에는 Rule Based Optimizer 이면서 인덱스를 사용하지 못하도록 to_char를 붙였다. 현재 EMP테
이블의 DEPTNO 칼럼 인덱스가 숨겨져 있는 상황인데 DEPT 테이블의 DEPTNO PK인덱스 컬럼에 변형
을 가하면 두 인덱스를 모두 사용하지 못하므로 RBO는 FULL SCAN해서 정렬 후 MERGE JOIN을 하는
실행 계획으로 바꾼다.
Oracle Hint, Tuning_ Optimizer Mode 변경 힌트
SQL> select /*+ ALL_ROWS */
e.empno,
e.ename,
d.dname
from emp e, dept d
where to_char(e.deptno) = to_char(d.deptno)
Execution Plan
-----------------------------------------------------------------
Operation Object Name Rows Bytes Cost
SELECT STATEMENT Optimizer Mode=HINT: ALL_ROWS 14 7
HASH JOIN 14 294 7
TABLE ACCESS FULL DEPT 4 44 3
TABLE ACCESS FULL EMP 14 140 3
-- 다음 실습을 위해 EMP 테이블의 DEPTNO 컬럼 인덱스를 보이도록 하자.
SQL> ALTER INDEX IDX_EMP_DEPTNO VISIBLE;
이번에는 똑같은 쿼리문 이지만 ALL_ROWS 힌트로 이용해 보자. 현재 EMP, DEPT 테이블의 통계 정보
는 생성되어 있는데 오라클 11g에서는 EMP, DEPT의 데이터 건수가 얼마 안되니 FULL SCAN해서 HASH
JOIN을 하는 방법으로 실행계획을 만들었다.
Oracle Hint, Tuning_ Optimizer Mode 변경 힌트
-- 먼저 EMP테이블에 생성되어 있는 인덱스를 확인하자.
SQL> SELECT a.index_name, a.column_name, b.visibility
FROM user_ind_columns a, user_indexes b
WHERE a.table_name = 'EMP'
AND a.index_name = b.index_name ;
-- DEPTNO 칼럼에 인덱스가 없다면 만들자. 있으면 SKIP
SQL> create index idx_emp_deptno on emp(deptno)
-- EMP 테이블의 DEPTNO 칼럼, DEPT 테이블의 DEPTNO 칼럼 모두에 인덱스가 생생되어 있으므로
FROM 절에서 멀리 떨어져 있는 DEPT 테이블이 드라이빙 테이블이 된다.
SQL> select /*+ RULE */
e.empno,
e.ename,
d.dname
from emp e, dept d
where e.deptno = d.deptno;
규칙 기반 옵티마이저에서 조인시 적용되는 원칙은 다음과 같다.
조인되는 두 컬럼 모두 인덱스가 있는 경우 FROM절에서 나중에 나타나는 테이블이 드라이빙 테이블
이 되어 먼저 SCAN하고 건건이 LOOP를 돌면서 비드라이빙 테이블을 인덱스 스캔하게 될 것이다.
[조인되는 두 테이블 모두에 인덱스가 있는 경우]
DEPT 테이블에서 DEPTNO는 PK이므로 이미 Unique Index가 생성되어 있다.
Oracle Hint, Tuning_ Optimizer Mode 변경 힌트
Execution Plan
-------------------------------------------------------------------
Operation Object Name Rows Bytes Cost
-------------------------------------------------------------------
SELECT STATEMENT Optimizer Mode=HINT: RULE
TABLE ACCESS BY INDEX ROWID EMP
NESTED LOOPS
TABLE ACCESS FULL DEPT  드라이빙 테이블
INDEX RANGE SCAN IDX_EMP_DEPTNO
SQL> select /*+ RULE */
e.empno,
e.ename,
d.dname
from dept d, emp e
where e.deptno = d.deptno;
Execution Plan
-------------------------------------------------------------------
Operation Object Name Rows Bytes Cost
-------------------------------------------------------------------
SELECT STATEMENT Optimizer Mode=HINT: RULE
NESTED LOOPS
TABLE ACCESS FULL EMP  드라이빙 테이블
TABLE ACCESS BY INDEX ROWID DEPT
INDEX UNIQUE SCAN PK_DEPT
Oracle Hint, Tuning_ Optimizer Mode 변경 힌트
-- EMP 테이블의 DEPTNO 칼럼에 생성된 인덱스를 숨기자. 아래에서는 EMP 테이블이 드라이빙 테이블이다.
SQL> Alter index idx_emp_deptno invisible;
SQL> select /*+ RULE */
e.empno,
e.ename,
d.dname
from emp e, dept d
where e.deptno = d.deptno;
Execution Plan
------------------------------------------------------------------
Operation Object Name Rows Bytes Cost
------------------------------------------------------------------
SELECT STATEMENT Optimizer Mode=HINT: RULE
NESTED LOOPS
TABLE ACCESS FULL EMP
TABLE ACCESS BY INDEX ROWID DEPT
INDEX UNIQUE SCAN PK_DEPT
조인 컬럼 중 한쪽 테이블의 조인 컬럼에만 인덱스가 있는 경우 FROM절 이후 테이블의 순서 보다 인
덱스가 생성되어 있지 않은 테이블이 드라이빙 테이블이 되는 실행 계획을 세우게 된다. 아래에서
DEPT 테이블의 DEPTNO는 PK로서 인덱스가 있지만 EMP 테이블의 DEPTNO는 인덱스가 없는 경우이
다.
[조인되는 두 테이블중 한 테이블에만 인덱스가 있는 경우]
Oracle Hint, Tuning_ Optimizer Mode 변경 힌트
SQL> select /*+ RULE */
e.empno,
e.ename,
d.dname
from dept d, emp e
where e.deptno = d.deptno;
Execution Plan
-------------------------------------------------------------------------------
Operation Object Name Rows Bytes Cost
SELECT STATEMENT Optimizer Mode=HINT: RULE
NESTED LOOPS
TABLE ACCESS FULL EMP
TABLE ACCESS BY INDEX ROWID DEPT
INDEX UNIQUE SCAN PK_DEPT
-- MYEMP1, MYDEPT1에서 실습을 해보자.
-- MYEMP1의 DEPTNO 칼럼에 인덱스가 없다면 아래처럼 인덱스를 생성하자.
SQL> CREATE INDEX IDX_MYEMP1_DEPTNO ON MYEMP1(DEPTNO);
-- 오라클 옵티마이저가 인덱스를 사용하지 못하도록 숨기자.
SQL> ALTER INDEX IDX_MYEMP1_DEPTNO INVISIBLE;
Oracle Hint, Tuning_ Optimizer Mode 변경 힌트
-- 현재 MYDEPT1 테이블의 DEPTNO 칼럼에 생성된 PK인덱스는 사용가능한 상태이다.
SQL> SELECT A.INDEX_NAME, A.COLUMN_NAME, B.VISIBILITY
FROM USER_IND_COLUMNS A, USER_INDEXES B
WHERE A.TABLE_NAME = 'MYDEPT1'
AND A.INDEX_NAME = B.INDEX_NAME;
INDEX_NAME COLUMN_NAME VISIBILITY
---------------------------------------------------------------
PK_MYDEPT1 DEPTNO VISIBLE
SQL> ALTER SESSION SET OPTIMIZER_MODE = RULE;
-- 오라클 RBO(RULE BASED OPTIMIZER)는 MYEMP1의 DEPTNO 칼럼에 인덱스가 없다고 판단하여 이를 드라이빙 테
이블로 선정하여 쿼리를 실행한다. 데이터가 1000만건 있는 테이블이 드라이빙 테이블이 되어 1000만번 루핑을 하면서
MYDEPT 테이블과 조인을 하니 많이 느리다.
SQL> SELECT COUNT(D.DNAME)
FROM MYEMP1 E, MYDEPT1 D
WHERE E.DEPTNO = D.DEPTNO;
COUNT(D.DNAME)
--------------
10000002
경 과: 00:00:7.28
Oracle Hint, Tuning_ Optimizer Mode 변경 힌트
Execution Plan
------------------------------------------------------------------
| Id | Operation | Name |
------------------------------------------------------------------
| 0 | SELECT STATEMENT | |
| 1 | SORT AGGREGATE | |
| 2 | NESTED LOOPS | |
| 3 | NESTED LOOPS | |
| 4 | TABLE ACCESS FULL | MYEMP1 |
|* 5 | INDEX UNIQUE SCAN | PK_MYDEPT1 |
| 6 | TABLE ACCESS BY INDEX ROWID | MYDEPT1 |
------------------------------------------------------------------
-- FROM절에서 테이블의 순서를 변경해도 동일하게 인덱스가 없는 MYEMP1이 드라이빙 테이블이 된다. MYEMP1 테
이블이 드라이빙 테이블이 되어 전체를 스캔하면서 MYDEPT1 테이블의 PK_MYDEPT1 PK인덱스를 이용하여 데이터를
찾은 후 DNAME 값을 알기위해 원본테이블을 ROWID로 접근함을 실행계획을 통해 알 수 있다. 결국 중첩루프
(NESTED LOOP)가 두 번 생겨 비효율적인 실행계획이 만들어 진다.
SQL> SELECT COUNT(D.DNAME)
FROM MYDEPT1 D, MYEMP1 E
WHERE E.DEPTNO = D.DEPTNO;
COUNT(D.DNAME)
--------------
10000002
경 과: 00:00:7.02
Oracle Hint, Tuning_ Optimizer Mode 변경 힌트
Execution Plan
------------------------------------------------------------------
| Id | Operation | Name |
------------------------------------------------------------------
| 0 | SELECT STATEMENT | |
| 1 | SORT AGGREGATE | |
| 2 | NESTED LOOPS | |
| 3 | NESTED LOOPS | |
| 4 | TABLE ACCESS FULL | MYEMP1 |
|* 5 | INDEX UNIQUE SCAN | PK_MYDEPT1 |
| 6 | TABLE ACCESS BY INDEX ROWID | MYDEPT1 |
------------------------------------------------------------------
-- 이번에는 반대로 MYDEPT1 테이블의 PK인덱스인 PK_MYDEPT1 인덱스를 숨기고 MYEMP1 테이블의 DEPTNO 칼럼 인덱스는
보이도록 한 후 위에서 실행한 쿼리를 돌려보자. 인덱스가 없는 MYDEPT1 테이블이 드라이빙 테이블이 된다. 데이터 건수가 적은
테이블이 드라이빙 테이블이 되어 쿼리 수행시간도 훨씬 단축된다. 또한 위에서 생성된 실행계획상의 중첩루프를 두 번하는 경우
는 발생하지 않는다. MYDEPT1 테이블이 드라이빙 테이블로 한 건씩 스캔하므로 DNAME값을 알 수 있기 때문이다.
SQL> ALTER INDEX IDX_MYEMP1_DEPTNO VISIBLE;
SQL> ALTER INDEX PK_MYDEPT1 INVISIBLE;
SQL> SELECT COUNT(D.DNAME)
FROM MYEMP1 E, MYDEPT1 D
WHERE E.DEPTNO = D.DEPTNO;
COUNT(D.DNAME)
--------------
10000002
경 과: 00:00:03.20
Oracle Hint, Tuning_ Optimizer Mode 변경 힌트
Execution Plan
-----------------------------------------------------------------
| Id | Operation | Name |
-----------------------------------------------------------------
| 0 | SELECT STATEMENT | |
| 1 | SORT AGGREGATE | |
| 2 | NESTED LOOPS | |
| 3 | TABLE ACCESS FULL | MYDEPT1 |
|* 4 | INDEX RANGE SCAN | IDX_MYEMP1_DEPTNO |
-------------------------------------------------------------------
-- 다음 실습을 위해 인덱스를 보이도록 하고 옵티마이저 모드도 기본값인 ALL_ROWS로 복귀시키자.
SQL> ALTER INDEX PK_MYDEPT1 VISIBLE;
SQL> ALTER INDEX IDX_MYEMP1_DEPTNO VISIBLE;
SQL> ALTER INDEX IDX_EMP_DEPTNO VISIBLE;
SQL> ALTER SESSION SET OPTIMIZER_MODE = ALL_ROWS;

More Related Content

What's hot

condicionado
 condicionado condicionado
condicionado
Edson César Reis
 
Manual de instalação operação e manutenção gmg diesel
Manual de instalação operação e manutenção gmg dieselManual de instalação operação e manutenção gmg diesel
Manual de instalação operação e manutenção gmg diesel
Tarcides Gregório
 
Narzędzie zarządzania testowaniem. Badanie TestRail.
Narzędzie zarządzania testowaniem. Badanie TestRail.Narzędzie zarządzania testowaniem. Badanie TestRail.
Narzędzie zarządzania testowaniem. Badanie TestRail.
Radoslaw Smilgin
 
Bombas industriais
Bombas industriaisBombas industriais
Bombas industriais
Renato Leitão
 
UKOUG, Oracle Transaction Locks
UKOUG, Oracle Transaction LocksUKOUG, Oracle Transaction Locks
UKOUG, Oracle Transaction Locks
Kyle Hailey
 
Tabela aço
Tabela açoTabela aço
Tabela aço
KLELTON BENETÃO
 
Softwareauswahlverfahren
SoftwareauswahlverfahrenSoftwareauswahlverfahren
Softwareauswahlverfahren
CIOConsultingTeam
 
Exercício - Torre de Resfriamento - Termodinâmica
Exercício - Torre de Resfriamento - TermodinâmicaExercício - Torre de Resfriamento - Termodinâmica
Exercício - Torre de Resfriamento - Termodinâmica
Rodrigo Thiago Passos Silva
 
Caldeira tratamento-químico
Caldeira tratamento-químicoCaldeira tratamento-químico
Caldeira tratamento-químico
ROBINSON CARLOS CRISTOVAM SILVA
 
Christo kutrovsky oracle, memory & linux
Christo kutrovsky   oracle, memory & linuxChristo kutrovsky   oracle, memory & linux
Christo kutrovsky oracle, memory & linux
Kyle Hailey
 
Nbr 15749 malha de aterramento
Nbr 15749   malha de aterramentoNbr 15749   malha de aterramento
Nbr 15749 malha de aterramento
Raphael Silva
 
2 Simbologia
2 Simbologia2 Simbologia
2 Simbologia
googlr
 
Silva telles
Silva tellesSilva telles
Silva telles
Edson Santos
 
Reynolds
Reynolds Reynolds
La balistica di-segna la città: l’arte delle fortificazioni nell’età moderna
La balistica di-segna la città: l’arte delle fortificazioni nell’età modernaLa balistica di-segna la città: l’arte delle fortificazioni nell’età moderna
La balistica di-segna la città: l’arte delle fortificazioni nell’età moderna
Università degli Studi di Genova
 
Acionamentos elétricos chaves de partida
Acionamentos elétricos   chaves de partidaAcionamentos elétricos   chaves de partida
Acionamentos elétricos chaves de partida
Angelo Hafner
 
MySQL Security
MySQL SecurityMySQL Security
MySQL Security
Ted Wennmark
 
Parafuso de arquimedes
Parafuso de arquimedesParafuso de arquimedes
Parafuso de arquimedes
Carlos Elson Cunha
 
Best Practices for Oracle Exadata and the Oracle Optimizer
Best Practices for Oracle Exadata and the Oracle OptimizerBest Practices for Oracle Exadata and the Oracle Optimizer
Best Practices for Oracle Exadata and the Oracle Optimizer
Edgar Alejandro Villegas
 
Solda MAG
Solda MAGSolda MAG
Solda MAG
Gustavo Pessoa
 

What's hot (20)

condicionado
 condicionado condicionado
condicionado
 
Manual de instalação operação e manutenção gmg diesel
Manual de instalação operação e manutenção gmg dieselManual de instalação operação e manutenção gmg diesel
Manual de instalação operação e manutenção gmg diesel
 
Narzędzie zarządzania testowaniem. Badanie TestRail.
Narzędzie zarządzania testowaniem. Badanie TestRail.Narzędzie zarządzania testowaniem. Badanie TestRail.
Narzędzie zarządzania testowaniem. Badanie TestRail.
 
Bombas industriais
Bombas industriaisBombas industriais
Bombas industriais
 
UKOUG, Oracle Transaction Locks
UKOUG, Oracle Transaction LocksUKOUG, Oracle Transaction Locks
UKOUG, Oracle Transaction Locks
 
Tabela aço
Tabela açoTabela aço
Tabela aço
 
Softwareauswahlverfahren
SoftwareauswahlverfahrenSoftwareauswahlverfahren
Softwareauswahlverfahren
 
Exercício - Torre de Resfriamento - Termodinâmica
Exercício - Torre de Resfriamento - TermodinâmicaExercício - Torre de Resfriamento - Termodinâmica
Exercício - Torre de Resfriamento - Termodinâmica
 
Caldeira tratamento-químico
Caldeira tratamento-químicoCaldeira tratamento-químico
Caldeira tratamento-químico
 
Christo kutrovsky oracle, memory & linux
Christo kutrovsky   oracle, memory & linuxChristo kutrovsky   oracle, memory & linux
Christo kutrovsky oracle, memory & linux
 
Nbr 15749 malha de aterramento
Nbr 15749   malha de aterramentoNbr 15749   malha de aterramento
Nbr 15749 malha de aterramento
 
2 Simbologia
2 Simbologia2 Simbologia
2 Simbologia
 
Silva telles
Silva tellesSilva telles
Silva telles
 
Reynolds
Reynolds Reynolds
Reynolds
 
La balistica di-segna la città: l’arte delle fortificazioni nell’età moderna
La balistica di-segna la città: l’arte delle fortificazioni nell’età modernaLa balistica di-segna la città: l’arte delle fortificazioni nell’età moderna
La balistica di-segna la città: l’arte delle fortificazioni nell’età moderna
 
Acionamentos elétricos chaves de partida
Acionamentos elétricos   chaves de partidaAcionamentos elétricos   chaves de partida
Acionamentos elétricos chaves de partida
 
MySQL Security
MySQL SecurityMySQL Security
MySQL Security
 
Parafuso de arquimedes
Parafuso de arquimedesParafuso de arquimedes
Parafuso de arquimedes
 
Best Practices for Oracle Exadata and the Oracle Optimizer
Best Practices for Oracle Exadata and the Oracle OptimizerBest Practices for Oracle Exadata and the Oracle Optimizer
Best Practices for Oracle Exadata and the Oracle Optimizer
 
Solda MAG
Solda MAGSolda MAG
Solda MAG
 

Similar to 2.1 optimizer mode를 변경하는 힌트(rule)

3.2 실행계획 sql 연산 (concatenation)
3.2 실행계획 sql 연산 (concatenation)3.2 실행계획 sql 연산 (concatenation)
3.2 실행계획 sql 연산 (concatenation)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
3.3 실행계획 SQL 연산 (Count,Count Stopkey/Filter)
3.3 실행계획 SQL 연산 (Count,Count Stopkey/Filter)3.3 실행계획 SQL 연산 (Count,Count Stopkey/Filter)
3.3 실행계획 SQL 연산 (Count,Count Stopkey/Filter)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
1.11 실행계획 해석 predicate
1.11 실행계획 해석 predicate1.11 실행계획 해석 predicate
1.8 튜닝의도구 dbms xplan
1.8 튜닝의도구 dbms xplan1.8 튜닝의도구 dbms xplan
3.5 실행계획 SQL 연산 (HASH SEMI-JOIN)
3.5 실행계획 SQL 연산 (HASH SEMI-JOIN)3.5 실행계획 SQL 연산 (HASH SEMI-JOIN)
3.5 실행계획 SQL 연산 (HASH SEMI-JOIN)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
#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분거리)
 
5.2 비트맵 인덱스
5.2 비트맵 인덱스5.2 비트맵 인덱스
3.4 실행계획 SQL 연산 (Hash Anti-Join)
3.4 실행계획 SQL 연산 (Hash Anti-Join)3.4 실행계획 SQL 연산 (Hash Anti-Join)
3.4 실행계획 SQL 연산 (Hash Anti-Join)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
SQL Profile을 이용한 SQL Plan 변경_Wh oracle
SQL Profile을 이용한 SQL Plan 변경_Wh oracleSQL Profile을 이용한 SQL Plan 변경_Wh oracle
SQL Profile을 이용한 SQL Plan 변경_Wh oracle
엑셈
 
1.7 튜닝의도구 sql autorace
1.7 튜닝의도구 sql autorace1.7 튜닝의도구 sql autorace
Database 튜닝 교육 110124
Database 튜닝 교육 110124Database 튜닝 교육 110124
Database 튜닝 교육 110124
한 경만
 
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
엑셈
 
배치 프로그램에서 튜닝대상 SQL 추출하기_Wh oracle
배치 프로그램에서 튜닝대상 SQL 추출하기_Wh oracle배치 프로그램에서 튜닝대상 SQL 추출하기_Wh oracle
배치 프로그램에서 튜닝대상 SQL 추출하기_Wh oracle
엑셈
 
6.4 hints for access paths(index)
6.4 hints for access paths(index)6.4 hints for access paths(index)
3.8 실행계획 SQL 연산 (MERGE JOIN, MERGE SEMI JOIN)
3.8 실행계획 SQL 연산 (MERGE JOIN, MERGE SEMI JOIN)3.8 실행계획 SQL 연산 (MERGE JOIN, MERGE SEMI JOIN)
3.8 실행계획 SQL 연산 (MERGE JOIN, MERGE SEMI JOIN)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
3.6 실행계획 SQL 연산 (NESTED LOOP SEMI-JOIN)
3.6 실행계획 SQL 연산 (NESTED LOOP SEMI-JOIN)3.6 실행계획 SQL 연산 (NESTED LOOP SEMI-JOIN)
3.6 실행계획 SQL 연산 (NESTED LOOP SEMI-JOIN)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
효율적인Sql작성방법 2주차
효율적인Sql작성방법 2주차효율적인Sql작성방법 2주차
효율적인Sql작성방법 2주차
희동 강
 
2.4 optimizer mode를 변경하는 힌트(choose)
2.4 optimizer mode를 변경하는 힌트(choose)2.4 optimizer mode를 변경하는 힌트(choose)
2.4 optimizer mode를 변경하는 힌트(choose)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
ecdevday8 웹개발자의 약한고리 SQL 뛰어넘기
ecdevday8 웹개발자의 약한고리 SQL 뛰어넘기ecdevday8 웹개발자의 약한고리 SQL 뛰어넘기
ecdevday8 웹개발자의 약한고리 SQL 뛰어넘기
Kenu, GwangNam Heo
 
3.7 실행계획 SQL 연산 (INDEX RANGE SCAN DESCENDING, INLIST ITERATIOR)
3.7 실행계획 SQL 연산 (INDEX RANGE SCAN DESCENDING, INLIST ITERATIOR)3.7 실행계획 SQL 연산 (INDEX RANGE SCAN DESCENDING, INLIST ITERATIOR)
3.7 실행계획 SQL 연산 (INDEX RANGE SCAN DESCENDING, INLIST ITERATIOR)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 

Similar to 2.1 optimizer mode를 변경하는 힌트(rule) (20)

3.2 실행계획 sql 연산 (concatenation)
3.2 실행계획 sql 연산 (concatenation)3.2 실행계획 sql 연산 (concatenation)
3.2 실행계획 sql 연산 (concatenation)
 
3.3 실행계획 SQL 연산 (Count,Count Stopkey/Filter)
3.3 실행계획 SQL 연산 (Count,Count Stopkey/Filter)3.3 실행계획 SQL 연산 (Count,Count Stopkey/Filter)
3.3 실행계획 SQL 연산 (Count,Count Stopkey/Filter)
 
1.11 실행계획 해석 predicate
1.11 실행계획 해석 predicate1.11 실행계획 해석 predicate
1.11 실행계획 해석 predicate
 
1.8 튜닝의도구 dbms xplan
1.8 튜닝의도구 dbms xplan1.8 튜닝의도구 dbms xplan
1.8 튜닝의도구 dbms xplan
 
3.5 실행계획 SQL 연산 (HASH SEMI-JOIN)
3.5 실행계획 SQL 연산 (HASH SEMI-JOIN)3.5 실행계획 SQL 연산 (HASH SEMI-JOIN)
3.5 실행계획 SQL 연산 (HASH SEMI-JOIN)
 
#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 비트맵 인덱스
 
3.4 실행계획 SQL 연산 (Hash Anti-Join)
3.4 실행계획 SQL 연산 (Hash Anti-Join)3.4 실행계획 SQL 연산 (Hash Anti-Join)
3.4 실행계획 SQL 연산 (Hash Anti-Join)
 
SQL Profile을 이용한 SQL Plan 변경_Wh oracle
SQL Profile을 이용한 SQL Plan 변경_Wh oracleSQL Profile을 이용한 SQL Plan 변경_Wh oracle
SQL Profile을 이용한 SQL Plan 변경_Wh oracle
 
1.7 튜닝의도구 sql autorace
1.7 튜닝의도구 sql autorace1.7 튜닝의도구 sql autorace
1.7 튜닝의도구 sql autorace
 
Database 튜닝 교육 110124
Database 튜닝 교육 110124Database 튜닝 교육 110124
Database 튜닝 교육 110124
 
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
 
배치 프로그램에서 튜닝대상 SQL 추출하기_Wh oracle
배치 프로그램에서 튜닝대상 SQL 추출하기_Wh oracle배치 프로그램에서 튜닝대상 SQL 추출하기_Wh oracle
배치 프로그램에서 튜닝대상 SQL 추출하기_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)
 
3.8 실행계획 SQL 연산 (MERGE JOIN, MERGE SEMI JOIN)
3.8 실행계획 SQL 연산 (MERGE JOIN, MERGE SEMI JOIN)3.8 실행계획 SQL 연산 (MERGE JOIN, MERGE SEMI JOIN)
3.8 실행계획 SQL 연산 (MERGE JOIN, MERGE SEMI JOIN)
 
3.6 실행계획 SQL 연산 (NESTED LOOP SEMI-JOIN)
3.6 실행계획 SQL 연산 (NESTED LOOP SEMI-JOIN)3.6 실행계획 SQL 연산 (NESTED LOOP SEMI-JOIN)
3.6 실행계획 SQL 연산 (NESTED LOOP SEMI-JOIN)
 
효율적인Sql작성방법 2주차
효율적인Sql작성방법 2주차효율적인Sql작성방법 2주차
효율적인Sql작성방법 2주차
 
2.4 optimizer mode를 변경하는 힌트(choose)
2.4 optimizer mode를 변경하는 힌트(choose)2.4 optimizer mode를 변경하는 힌트(choose)
2.4 optimizer mode를 변경하는 힌트(choose)
 
ecdevday8 웹개발자의 약한고리 SQL 뛰어넘기
ecdevday8 웹개발자의 약한고리 SQL 뛰어넘기ecdevday8 웹개발자의 약한고리 SQL 뛰어넘기
ecdevday8 웹개발자의 약한고리 SQL 뛰어넘기
 
3.7 실행계획 SQL 연산 (INDEX RANGE SCAN DESCENDING, INLIST ITERATIOR)
3.7 실행계획 SQL 연산 (INDEX RANGE SCAN DESCENDING, INLIST ITERATIOR)3.7 실행계획 SQL 연산 (INDEX RANGE SCAN DESCENDING, INLIST ITERATIOR)
3.7 실행계획 SQL 연산 (INDEX RANGE SCAN DESCENDING, INLIST ITERATIOR)
 

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

자마린.안드로이드 기본 내장레이아웃(Built-In List Item Layouts)
자마린.안드로이드 기본 내장레이아웃(Built-In List Item Layouts)자마린.안드로이드 기본 내장레이아웃(Built-In List Item Layouts)
자마린.안드로이드 기본 내장레이아웃(Built-In List Item Layouts)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
자마린 iOS 멀티화면 컨트롤러_네비게이션 컨트롤러, 루트 뷰 컨트롤러
자마린 iOS 멀티화면 컨트롤러_네비게이션 컨트롤러, 루트 뷰 컨트롤러자마린 iOS 멀티화면 컨트롤러_네비게이션 컨트롤러, 루트 뷰 컨트롤러
자마린 iOS 멀티화면 컨트롤러_네비게이션 컨트롤러, 루트 뷰 컨트롤러
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[IT교육/IT학원]Develope를 위한 IT실무교육
[IT교육/IT학원]Develope를 위한 IT실무교육[IT교육/IT학원]Develope를 위한 IT실무교육
[IT교육/IT학원]Develope를 위한 IT실무교육
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)
[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)
[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[정보처리기사자격증학원]정보처리기사 취득 양성과정(국비무료 자격증과정)
[정보처리기사자격증학원]정보처리기사 취득 양성과정(국비무료 자격증과정)[정보처리기사자격증학원]정보처리기사 취득 양성과정(국비무료 자격증과정)
[정보처리기사자격증학원]정보처리기사 취득 양성과정(국비무료 자격증과정)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
탑크리에듀(구로디지털단지역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분거리)
 
[구로자마린학원/자마린강좌/자마린교육]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번출구 2분거리)
 
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...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
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번출구 2분거리)
 
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번출구 2분거리)
 
(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌
(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌
(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌
탑크리에듀(구로디지털단지역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. 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번출구 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(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
 

2.1 optimizer mode를 변경하는 힌트(rule)

  • 1. Oracle Hint, Tuning Optimizer Mode를 변경하는 힌트(Rule)
  • 2. Oracle Hint, Tuning_ Optimizer Mode 변경 힌트 2.1 Optimizer Mode를 변경하는 힌트 규칙 기반 옵티마이저(Rule-Based Optimizer)로 동작하여 실행 계획을 세우도록 하는 힌트인데 이 경우 테이블이나 인덱스의 통계 정보가 있다고 하더라도 무시하고 사용하지 않으며 규칙에 기반한 실행 계획을 세우게 된다. 옵티마이저는 순위가 매겨진 오퍼레이션에 근거하여 실행 계획을 세우며 순위가 높은 것이 우선 적 용된다. 만약 SQL 문장에서 /*+ RULE INDEX(emp idx_ename) */ 와 같이 RULE 힌트와 다른 힌트가 같 이 사용된다면 RULE 힌트만 적용되므로 주의하자.
  • 3. Oracle Hint, Tuning_ Optimizer Mode 변경 힌트 EMP 테이블의 DEPTNO 칼럼에 현재 인덱스가 생성되지 않은 상태이다. RBO에서 조인시 칼럼 인덱스가 없는쪽이 드라이빙 테이블이 되니 확인해 보라. -- EMP테이블의 DEPTNO 칼럼에 인덱스가 있다면 옵티마이저가 사용하지 못하도록 숨기자. SQL>ALTER INDEX IDX_EMP_DEPTNO INVISIBLE; SQL>SELECT /*+ RULE */ e.empno, e.ename, d.dname FROM emp e, dept d WHERE e.deptno = d.deptno Execution Plan --------------------------------------------------------------- Operation Object Name Rows Bytes Cost SELECT STATEMENT Optimizer Mode=HINT: RULE NESTED LOOPS TABLE ACCESS FULL EMP  조인의 경우 실행계획상 같은 레벨이라면 위에 TABLE ACCESS BY INDEX ROWID DEPT 있는 것이 드라이빙 테이블이다. INDEX UNIQUE SCAN PK_DEPT
  • 4. Oracle Hint, Tuning_ Optimizer Mode 변경 힌트 SQL> SELECT /*+ RULE */ e.empno, e.ename, d.dname FROM emp e, dept d WHERE to_char(e.deptno) = to_char(d.deptno) Execution Plan ------------------------------------------------------------------- Operation Object Name Rows Bytes Cost SELECT STATEMENT Optimizer Mode=HINT: RULE MERGE JOIN SORT JOIN TABLE ACCESS FULL DEPT SORT JOIN TABLE ACCESS FULL EMP 이번에는 Rule Based Optimizer 이면서 인덱스를 사용하지 못하도록 to_char를 붙였다. 현재 EMP테 이블의 DEPTNO 칼럼 인덱스가 숨겨져 있는 상황인데 DEPT 테이블의 DEPTNO PK인덱스 컬럼에 변형 을 가하면 두 인덱스를 모두 사용하지 못하므로 RBO는 FULL SCAN해서 정렬 후 MERGE JOIN을 하는 실행 계획으로 바꾼다.
  • 5. Oracle Hint, Tuning_ Optimizer Mode 변경 힌트 SQL> select /*+ ALL_ROWS */ e.empno, e.ename, d.dname from emp e, dept d where to_char(e.deptno) = to_char(d.deptno) Execution Plan ----------------------------------------------------------------- Operation Object Name Rows Bytes Cost SELECT STATEMENT Optimizer Mode=HINT: ALL_ROWS 14 7 HASH JOIN 14 294 7 TABLE ACCESS FULL DEPT 4 44 3 TABLE ACCESS FULL EMP 14 140 3 -- 다음 실습을 위해 EMP 테이블의 DEPTNO 컬럼 인덱스를 보이도록 하자. SQL> ALTER INDEX IDX_EMP_DEPTNO VISIBLE; 이번에는 똑같은 쿼리문 이지만 ALL_ROWS 힌트로 이용해 보자. 현재 EMP, DEPT 테이블의 통계 정보 는 생성되어 있는데 오라클 11g에서는 EMP, DEPT의 데이터 건수가 얼마 안되니 FULL SCAN해서 HASH JOIN을 하는 방법으로 실행계획을 만들었다.
  • 6. Oracle Hint, Tuning_ Optimizer Mode 변경 힌트 -- 먼저 EMP테이블에 생성되어 있는 인덱스를 확인하자. SQL> SELECT a.index_name, a.column_name, b.visibility FROM user_ind_columns a, user_indexes b WHERE a.table_name = 'EMP' AND a.index_name = b.index_name ; -- DEPTNO 칼럼에 인덱스가 없다면 만들자. 있으면 SKIP SQL> create index idx_emp_deptno on emp(deptno) -- EMP 테이블의 DEPTNO 칼럼, DEPT 테이블의 DEPTNO 칼럼 모두에 인덱스가 생생되어 있으므로 FROM 절에서 멀리 떨어져 있는 DEPT 테이블이 드라이빙 테이블이 된다. SQL> select /*+ RULE */ e.empno, e.ename, d.dname from emp e, dept d where e.deptno = d.deptno; 규칙 기반 옵티마이저에서 조인시 적용되는 원칙은 다음과 같다. 조인되는 두 컬럼 모두 인덱스가 있는 경우 FROM절에서 나중에 나타나는 테이블이 드라이빙 테이블 이 되어 먼저 SCAN하고 건건이 LOOP를 돌면서 비드라이빙 테이블을 인덱스 스캔하게 될 것이다. [조인되는 두 테이블 모두에 인덱스가 있는 경우] DEPT 테이블에서 DEPTNO는 PK이므로 이미 Unique Index가 생성되어 있다.
  • 7. Oracle Hint, Tuning_ Optimizer Mode 변경 힌트 Execution Plan ------------------------------------------------------------------- Operation Object Name Rows Bytes Cost ------------------------------------------------------------------- SELECT STATEMENT Optimizer Mode=HINT: RULE TABLE ACCESS BY INDEX ROWID EMP NESTED LOOPS TABLE ACCESS FULL DEPT  드라이빙 테이블 INDEX RANGE SCAN IDX_EMP_DEPTNO SQL> select /*+ RULE */ e.empno, e.ename, d.dname from dept d, emp e where e.deptno = d.deptno; Execution Plan ------------------------------------------------------------------- Operation Object Name Rows Bytes Cost ------------------------------------------------------------------- SELECT STATEMENT Optimizer Mode=HINT: RULE NESTED LOOPS TABLE ACCESS FULL EMP  드라이빙 테이블 TABLE ACCESS BY INDEX ROWID DEPT INDEX UNIQUE SCAN PK_DEPT
  • 8. Oracle Hint, Tuning_ Optimizer Mode 변경 힌트 -- EMP 테이블의 DEPTNO 칼럼에 생성된 인덱스를 숨기자. 아래에서는 EMP 테이블이 드라이빙 테이블이다. SQL> Alter index idx_emp_deptno invisible; SQL> select /*+ RULE */ e.empno, e.ename, d.dname from emp e, dept d where e.deptno = d.deptno; Execution Plan ------------------------------------------------------------------ Operation Object Name Rows Bytes Cost ------------------------------------------------------------------ SELECT STATEMENT Optimizer Mode=HINT: RULE NESTED LOOPS TABLE ACCESS FULL EMP TABLE ACCESS BY INDEX ROWID DEPT INDEX UNIQUE SCAN PK_DEPT 조인 컬럼 중 한쪽 테이블의 조인 컬럼에만 인덱스가 있는 경우 FROM절 이후 테이블의 순서 보다 인 덱스가 생성되어 있지 않은 테이블이 드라이빙 테이블이 되는 실행 계획을 세우게 된다. 아래에서 DEPT 테이블의 DEPTNO는 PK로서 인덱스가 있지만 EMP 테이블의 DEPTNO는 인덱스가 없는 경우이 다. [조인되는 두 테이블중 한 테이블에만 인덱스가 있는 경우]
  • 9. Oracle Hint, Tuning_ Optimizer Mode 변경 힌트 SQL> select /*+ RULE */ e.empno, e.ename, d.dname from dept d, emp e where e.deptno = d.deptno; Execution Plan ------------------------------------------------------------------------------- Operation Object Name Rows Bytes Cost SELECT STATEMENT Optimizer Mode=HINT: RULE NESTED LOOPS TABLE ACCESS FULL EMP TABLE ACCESS BY INDEX ROWID DEPT INDEX UNIQUE SCAN PK_DEPT -- MYEMP1, MYDEPT1에서 실습을 해보자. -- MYEMP1의 DEPTNO 칼럼에 인덱스가 없다면 아래처럼 인덱스를 생성하자. SQL> CREATE INDEX IDX_MYEMP1_DEPTNO ON MYEMP1(DEPTNO); -- 오라클 옵티마이저가 인덱스를 사용하지 못하도록 숨기자. SQL> ALTER INDEX IDX_MYEMP1_DEPTNO INVISIBLE;
  • 10. Oracle Hint, Tuning_ Optimizer Mode 변경 힌트 -- 현재 MYDEPT1 테이블의 DEPTNO 칼럼에 생성된 PK인덱스는 사용가능한 상태이다. SQL> SELECT A.INDEX_NAME, A.COLUMN_NAME, B.VISIBILITY FROM USER_IND_COLUMNS A, USER_INDEXES B WHERE A.TABLE_NAME = 'MYDEPT1' AND A.INDEX_NAME = B.INDEX_NAME; INDEX_NAME COLUMN_NAME VISIBILITY --------------------------------------------------------------- PK_MYDEPT1 DEPTNO VISIBLE SQL> ALTER SESSION SET OPTIMIZER_MODE = RULE; -- 오라클 RBO(RULE BASED OPTIMIZER)는 MYEMP1의 DEPTNO 칼럼에 인덱스가 없다고 판단하여 이를 드라이빙 테 이블로 선정하여 쿼리를 실행한다. 데이터가 1000만건 있는 테이블이 드라이빙 테이블이 되어 1000만번 루핑을 하면서 MYDEPT 테이블과 조인을 하니 많이 느리다. SQL> SELECT COUNT(D.DNAME) FROM MYEMP1 E, MYDEPT1 D WHERE E.DEPTNO = D.DEPTNO; COUNT(D.DNAME) -------------- 10000002 경 과: 00:00:7.28
  • 11. Oracle Hint, Tuning_ Optimizer Mode 변경 힌트 Execution Plan ------------------------------------------------------------------ | Id | Operation | Name | ------------------------------------------------------------------ | 0 | SELECT STATEMENT | | | 1 | SORT AGGREGATE | | | 2 | NESTED LOOPS | | | 3 | NESTED LOOPS | | | 4 | TABLE ACCESS FULL | MYEMP1 | |* 5 | INDEX UNIQUE SCAN | PK_MYDEPT1 | | 6 | TABLE ACCESS BY INDEX ROWID | MYDEPT1 | ------------------------------------------------------------------ -- FROM절에서 테이블의 순서를 변경해도 동일하게 인덱스가 없는 MYEMP1이 드라이빙 테이블이 된다. MYEMP1 테 이블이 드라이빙 테이블이 되어 전체를 스캔하면서 MYDEPT1 테이블의 PK_MYDEPT1 PK인덱스를 이용하여 데이터를 찾은 후 DNAME 값을 알기위해 원본테이블을 ROWID로 접근함을 실행계획을 통해 알 수 있다. 결국 중첩루프 (NESTED LOOP)가 두 번 생겨 비효율적인 실행계획이 만들어 진다. SQL> SELECT COUNT(D.DNAME) FROM MYDEPT1 D, MYEMP1 E WHERE E.DEPTNO = D.DEPTNO; COUNT(D.DNAME) -------------- 10000002 경 과: 00:00:7.02
  • 12. Oracle Hint, Tuning_ Optimizer Mode 변경 힌트 Execution Plan ------------------------------------------------------------------ | Id | Operation | Name | ------------------------------------------------------------------ | 0 | SELECT STATEMENT | | | 1 | SORT AGGREGATE | | | 2 | NESTED LOOPS | | | 3 | NESTED LOOPS | | | 4 | TABLE ACCESS FULL | MYEMP1 | |* 5 | INDEX UNIQUE SCAN | PK_MYDEPT1 | | 6 | TABLE ACCESS BY INDEX ROWID | MYDEPT1 | ------------------------------------------------------------------ -- 이번에는 반대로 MYDEPT1 테이블의 PK인덱스인 PK_MYDEPT1 인덱스를 숨기고 MYEMP1 테이블의 DEPTNO 칼럼 인덱스는 보이도록 한 후 위에서 실행한 쿼리를 돌려보자. 인덱스가 없는 MYDEPT1 테이블이 드라이빙 테이블이 된다. 데이터 건수가 적은 테이블이 드라이빙 테이블이 되어 쿼리 수행시간도 훨씬 단축된다. 또한 위에서 생성된 실행계획상의 중첩루프를 두 번하는 경우 는 발생하지 않는다. MYDEPT1 테이블이 드라이빙 테이블로 한 건씩 스캔하므로 DNAME값을 알 수 있기 때문이다. SQL> ALTER INDEX IDX_MYEMP1_DEPTNO VISIBLE; SQL> ALTER INDEX PK_MYDEPT1 INVISIBLE; SQL> SELECT COUNT(D.DNAME) FROM MYEMP1 E, MYDEPT1 D WHERE E.DEPTNO = D.DEPTNO; COUNT(D.DNAME) -------------- 10000002 경 과: 00:00:03.20
  • 13. Oracle Hint, Tuning_ Optimizer Mode 변경 힌트 Execution Plan ----------------------------------------------------------------- | Id | Operation | Name | ----------------------------------------------------------------- | 0 | SELECT STATEMENT | | | 1 | SORT AGGREGATE | | | 2 | NESTED LOOPS | | | 3 | TABLE ACCESS FULL | MYDEPT1 | |* 4 | INDEX RANGE SCAN | IDX_MYEMP1_DEPTNO | ------------------------------------------------------------------- -- 다음 실습을 위해 인덱스를 보이도록 하고 옵티마이저 모드도 기본값인 ALL_ROWS로 복귀시키자. SQL> ALTER INDEX PK_MYDEPT1 VISIBLE; SQL> ALTER INDEX IDX_MYEMP1_DEPTNO VISIBLE; SQL> ALTER INDEX IDX_EMP_DEPTNO VISIBLE; SQL> ALTER SESSION SET OPTIMIZER_MODE = ALL_ROWS;