SlideShare une entreprise Scribd logo
1  sur  21
오라클 SQL 최적화 TIP
SQL튜닝을 위한 필수 지식
작성자 : 이종철, 탑크리에듀(topcredu.co.kr)
실습테이블(MYEMP1)
칼럼이름 데이터 타입
Key
Type
NN/
Unique
FK table
FK
column
설명
EMPNO NUMBER PK NN,U 사번
ENAME VARCHAR2(100) NN 이름
DEPTNO VARCHAR2(1) FK MYDEPT1 DEPTNO 부서코드
ADDR VARCHAR2(100) 주소
SAL NUMBER(7) 급여
JOB VARCHAR2(20) 직무
COMM NUMBER(7) 수당
SUNGBYUL VARCHAR2(1)
성별
(M : 남, F : 여)
HIREDATE DATE 입사일자
OUTDATE VARCHAR2(8) 퇴사일자
MGR NUMBER FK MYEMP1 EMPNO 관리자사번
실습테이블(MYDEPT1)
칼럼이름 데이터 타입
Key
Type
NN/
Unique
FK table
FK
column
설명
DEPTNO VARCHAR2(1) PK NN,U 부서코드
DNAME VARCHAR2(100) 부서명
UP_DEPTNO VARCHAR2(1) FK MYDEPT1 DEPTNO
상위
부서코드
실습 데이터 생성
http://ojc.asia/bbs/board.php?bo_table=LecHINT&wr_id=117&page=5
테스트 환경 : 오라클11g R2
인덱스 생성 현황
1. MYEMP1 테이블(1000만건) 의 인덱스 생성 현황
SELECT A.INDEX_NAME, A.COLUMN_NAME, B.VISIBILITY
FROM USER_IND_COLUMNS A, USER_INDEXES B
WHERE A.TABLE_NAME = 'MYEMP1'
AND A.INDEX_NAME = B.INDEX_NAME;
• PK_MYEMP1 EMPNO VISIBLE
• IDX_MYEMP1_ENAME ENAME VISIBLE
• IDX_MYEMP1_SAL SAL VISIBLE
• IDX_MYEMP1_DEPTNO DEPTNO VISIBLE
• IDX_MYEMP1_JOB JOB VISIBLE
• IDX_MYEMP1_MGR MGR VISIBLE
2. MYDEPT1 테이블(7건)의 인덱스 생성 현황
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;
• PK_MYDEPT1 DEPTNO VISIBLE
1. 인덱스된 컬럼을 포함하는 표현식,함수, 계산식
WHERE SUBSTR(ename,1,3) = 'SCO'  WHERE ename LIKE 'SCO%'
WHERE TRUNC (hiredate) = TRUNC (SYSDATE)

WHERE hiredate BETWEEN TRUNC (SYSDATE) AND TRUNC (SYSDATE) + .99999
WHERE ename || job = 'FORDCLERK'  WHERE ename = 'FORD’ AND job = ‘CLERK’
WHERE sal + 1000 < 2000  WHERE sal < 1000
 인덱스된 컬럼을 포함하는 표현(EXPRESSION), 함수, 계산(CALCULATIONS)은
인덱스를 사용하지 못한다. 인덱스 칼럼 보다는 반대쪽에 변형을 가하자.
2. SELECT절에서 DISTINCT 사용은 피하자.
-- 1.4초
SELECT DISTINCT d.dname
FROM mydept1 D, myemp1 E
WHERE D.deptno = E.deptno;
-- 0초
SELECT d.dname
FROM mydept1 D
WHERE EXISTS (SELECT 1
FROM myemp1 E
WHERE D.deptno = e.deptno);[결과]
개발1팀
기획1팀
기획2팀
개발2팀
3. WHERE절 비교칼럼 데이터타입은 일치시켜라.
-- deptno칼럼은 문자칼럼, 아래 WHERE절은 to_number(deptno) = 1 과 –
--동일하므로 deptno 칼럼의 인덱스는 사용되지 못한다.
-- 1.4초
SELECT COUNT(1) FROM myemp1
WHERE deptno = 1;
-- deptno 칼럼의 인덱스 사용가능하다.
-- 0.2초
SELECT COUNT(1) FROM myemp1
WHERE deptno = '1';
4. OUTER JOIN, IS NULL을 이용한 안티조인 보다는 NOT
IN, NOT EXISTS를 사용하자.
-- 1.6초
select d.deptno,dname
from myemp1 e, mydept1 d
where e.deptno(+) = d.deptno
and e.empno is null;
-- 0초
select dname from mydept1
where deptno not in (select deptno from myemp1
where deptno is not null )
-- 0초
select dname from mydept1 d
where not exists (
select * from myemp1 e
where e.deptno = d.deptno
);
5. OUTER JOIN, UNION ALL로 FULL OUTER JOIN을 구현하
기 보다는 FULL OUTER JOIN 구문을 사용하자.
-- 6초
SELECT empno, ename, d.deptno, dname
FROM myemp1 e, mydept1 d
WHERE e.deptno(+) = d.deptno
UNION ALL
-- MYEMP1 테이블에서 MYDEPT1 테이블에 없는
DEPTNO를 가지고 있는 데이터 추출
SELECT empno, ename, e.deptno, NULL
FROM myemp1 e, mydept1 d
WHERE e.deptno = d.deptno(+)
AND d.deptno IS NULL
ORDER BY empno, ename, deptno, dname;
-- 4.8초
SELECT empno, ename,
NVL(d.deptno,d.deptno) deptno, dname
FROM myemp1 e FULL OUTER JOIN mydept1 d
ON (e.deptno = d.deptno)
ORDER BY empno, ename, deptno, dname;
6. IN을 이용한 조인 보다는 EXISTS를 사용하자.
-- 3.6초
SELECT count(ename) FROM myemp1 e1
WHERE empno IN
(SELECT mgr FROM myemp1 e2);
-- 1.3초
SELECT count(ename) FROM myemp1 e1
WHERE EXISTS (SELECT 1 from myemp1 e2
WHERE e1.mgr = e2.empno);
7. UNION 보다는 UNION ALL을 사용하라.
-- 10초
SELECT empno, ename, d.deptno, dname
FROM myemp1 e, mydept1 d
WHERE e.deptno(+) = d.deptno
UNION
SELECT empno, ename, e.deptno, NULL
FROM myemp1 e, mydept1 d
WHERE e.deptno = d.deptno(+)
AND d.deptno IS NULL;
-- 0초
SELECT empno, ename, d.deptno, dname
FROM myemp1 e, mydept1 d
WHERE e.deptno(+) = d.deptno
UNION ALL
SELECT empno, ename, e.deptno, NULL
FROM myemp1 e, mydept1 d
WHERE e.deptno = d.deptno(+)
AND d.deptno IS NULL;
8. 조인되는 건수가 작다면 일반적인 조인보다 스칼라
서브쿼리 사용도 고려하라.
-- 1.1초
SELECT (d.dname)
FROM myemp1 e, mydept1 d
WHERE e.deptno = d.deptno
AND e.sal > 5800000;
-- 0.8초
SELECT (select dname from mydept1 d
where d.deptno = e.deptno)
FROM myemp1 e
WHERE e.sal > 5800000;
9. MYEMP1에서 사번오름차순으로 사번, 사원명, 급여
를 출력하는 쿼리 작성
-- 3.5초
-- empno 칼럼의 PK 인덱스 사용못했다.
-- FULL SCAN 후 정렬하므로 성능저하.
SELECT empno, ename, sal
FROM myemp1
ORDER BY empno;
-- 0초
-- 인덱스 영역에서 스캔 하도록 힌트사용
SELECT /*+ index(e pk_myemp1) */
empno, ename, sal
FROM myemp1 e
ORDER BY empno;
-- order by절은 생략해도 된다. 인덱스영역은 이미 데이
터가 정렬되어 보관되므로 따로 정렬할 필요없다.
10. 인덱스없이 COUNT 여러 번 실행시 통합해서
COUNT CASE를 이용하자.
1. sal 칼럼에 인덱스가 있는 경우
-- 0.071초
select count(1) from myemp1
where sal < 100000;
-- 0.14초
select count(1) from myemp1
where sal between 5000000 and 6000000;
-- 1.62초,인덱스가 있을 땐 통합하면 더 느림
select count( case when sal < 1000000 then 1
else null end) cnt1,
count( case when sal between 5000000 and
6000000 then 1 else null end) cnt2
from myemp1;
2. sal 칼럼에 인덱스가 없는 경우
alter index idx_myemp1_sal invisible ;
-- 1.8초
select count(1) from myemp1
where sal < 100000;
-- 1.4초
select count(1) from myemp1
where sal between 5000000 and 6000000;
-- 1.58초
select count( case when sal < 1000000 then 1 else
null end) cnt1,
count( case when sal between 5000000 and
6000000 then 1 else null end) cnt2
from myemp1;
11. 인덱스 칼럼을 WHERE절에서 사용시 OR를 UNION
ALL로
-- 3.555초
SELECT e1.ename
FROM myemp1 e1, myemp1 e2
WHERE e1.ename = e2.ename
OR e1.sal = e2.sal;
-- 3.048초
-- 인덱스가 생성된 칼럼에 대해 or 로 WHERE절을
사용하는 경우 union all을 사용하는것이 조금 빠름.
SELECT e1.ename FROM myemp1 e1, myemp1 e2
WHERE e1.ename = e2.ename
union all
SELECT e1.ename FROM myemp1 e1, myemp1 e2
WHERE e1.sal = e2.sal;
12. 그룹핑시 HAVING 보다 WHERE절로 조건검색을
-- 2.7초
-- Having절은 SELECT에서 사용하지 말자.
select
deptno, avg(sal)
from myemp1
group by deptno
having deptno = '1';
-- 1.7
select
deptno, avg(sal)
from myemp1
where deptno = '1'
group by deptno;
13. 공통쿼리는 WITH문으로 통합하자.
-- 인라인뷰를 이용한 경우, 7초
SELECT e.ename AS employee_name,
emps1.emp_count ,
m.ename AS manager_name,
emps2.emp_count
FROM myemp1 e,
(SELECT deptno, COUNT(*) AS emp_count
FROM myemp1
GROUP BY deptno) emps1,
myemp1 m,
(SELECT deptno, COUNT(*) AS emp_count
FROM myemp1
GROUP BY deptno) emps2
WHERE e.deptno = emps1.deptno
AND e.mgr = m.empno
AND m.deptno = emps2.deptno;
-- WITH문을 이용한 경우, 4.6초
WITH emp_count AS (
SELECT deptno, COUNT(*) AS dept_count
FROM myemp1
GROUP BY deptno
)
SELECT e.ename,
emps1.dept_count,
m.ename,
emps2.dept_count
FROM myemp1 e,
emp_count emps1,
myemp1 m,
emp_count emps2
WHERE e.deptno = emps1.deptno
AND e.mgr = m.empno
AND m.deptno = emps2.deptno;
14. 여러 칼럼으로 구성된 복합인덱스 사용시 INDEX 힌
트를 적절히 사용하여 인덱스를 취사선택하자.
CREATE TABLE INDEXTEST (
A1 NUMBER NOT NULL, A2 NUMBER NOT NULL,
A3 VARCHAR2(50) NOT NULL, A4 VARCHAR2(100));
-- 100만건 생성
INSERT INTO INDEXTEST
SELECT
MOD(ROWNUM-1, 90) * 4 A1,
ROWNUM - 1 A2,
TO_CHAR(ROWNUM - 1, 'RN') A3,
LPAD('A',100,'A') A4
FROM DUAL CONNECT BY LEVEL<=1000000;
-- 실습을 위한 인덱스 생성
CREATE INDEX IDX_IT_1_2 ON INDEXTEST(A1,A2);
CREATE INDEX IDX_IT_1_2_3 ON INDEXTEST(A1,A2,A3);
CREATE INDEX IDX_IT_3_1_2 ON INDEXTEST(A3,A1,A2);
실습예문 : http://ojc.asia/bbs/board.php?bo_table=LecHINT&wr_id=222&page=2
-- 먼저 힌트를 사용하지 않은 쿼리를 보자.
-- A2, A1, A3 복합 인덱스를 사용한다.
SELECT A1, A2, A3 FROM INDEXTEST
-- A1, A2 칼럼에 있는 인덱스를 사용하라는 힌트사용
-- A1, A2 복합인덱스를 이용한다.
SELECT /*+ index(INDEXTEST (A1, A2)) */ A1, A2, A3 FROM
INDEXTEST;
15. TOP-N 쿼리(급여 상위 5명) – 인덱스 힌트를 이용하자
-- 급여 상위 5명의 이름, 급여출력
-- 1.4초
SELECT rownum, ename ,sal
FROM (
SELECT ename ,sal
FROM myemp1
ORDER BY sal DESC) e
WHERE rownum <= 5 ;
-- 급여 상위 5명의 이름, 급여출력
-- INDEX_DESC 힌트이용, 0초
SELECT rownum, ename ,sal
FROM (
SELECT /*+ index_desc(e1 idx_myemp1_sal) */
e1. ename ,e1.sal
FROM myemp1 e1
WHERE e1.sal > 0
ORDER BY e1.sal DESC) e
WHERE rownum <= 5 ;
16. PAGINATION 쿼리 – 인덱스 힌트를 이용하자
-- order by 사용, 인덱스 사용못함, 4.5초
SELECT empno, ename, sal
FROM (SELECT empno, ename, sal ,
ROWNUM rnum
FROM (SELECT empno, ename, sal
FROM myemp1
ORDER BY sal desc) e
WHERE ROWNUM <= 1000*10)
WHERE rnum >= 999*10+1 ;
-- 인덱스 사용하기 위한 힌트 사용, 0초
select empno, ename, sal
from (
select /*+ index_desc(e1 idx_myemp1_sal) */
rownum rnum, empno, ename, sal
from myemp1 e1
where sal > 0 and rownum <= 1000*10
)
where rnum >= 999*10+1;
myemp1 테이블에서 sal가 높은것부터 작은것 순서로 한페이지에 10개씩
리스트를 보인다고 했을 때 1000번째 페이지를 SELECT하는 쿼리를 만드세요.
THIS PRACTICE MAKES EXPERT!
PL/SQL단기속성(1일완성)SQL힌트/튜닝(단기2일교육)SQL기초과정

Contenu connexe

Tendances

SAS Macros part 4.1
SAS Macros part 4.1SAS Macros part 4.1
SAS Macros part 4.1
venkatam
 
pg_proctab: Accessing System Stats in PostgreSQL
pg_proctab: Accessing System Stats in PostgreSQLpg_proctab: Accessing System Stats in PostgreSQL
pg_proctab: Accessing System Stats in PostgreSQL
Command Prompt., Inc
 
PL/SQL Code for Sample Projects
PL/SQL Code for Sample ProjectsPL/SQL Code for Sample Projects
PL/SQL Code for Sample Projects
jwjablonski
 
이승재, 사례로 배우는 디스어셈블리 디버깅, NDC2014
이승재, 사례로 배우는 디스어셈블리 디버깅, NDC2014이승재, 사례로 배우는 디스어셈블리 디버깅, NDC2014
이승재, 사례로 배우는 디스어셈블리 디버깅, NDC2014
devCAT Studio, NEXON
 

Tendances (20)

DBパフォーマンスチューニングの基礎:インデックス入門
DBパフォーマンスチューニングの基礎:インデックス入門DBパフォーマンスチューニングの基礎:インデックス入門
DBパフォーマンスチューニングの基礎:インデックス入門
 
Understanding DB2 Optimizer
Understanding DB2 OptimizerUnderstanding DB2 Optimizer
Understanding DB2 Optimizer
 
SAS Macros part 4.1
SAS Macros part 4.1SAS Macros part 4.1
SAS Macros part 4.1
 
Plsql task
Plsql taskPlsql task
Plsql task
 
[Pgday.Seoul 2017] 7. PostgreSQL DB Tuning 기업사례 - 송춘자
[Pgday.Seoul 2017] 7. PostgreSQL DB Tuning 기업사례 - 송춘자[Pgday.Seoul 2017] 7. PostgreSQL DB Tuning 기업사례 - 송춘자
[Pgday.Seoul 2017] 7. PostgreSQL DB Tuning 기업사례 - 송춘자
 
[Pgday.Seoul 2020] SQL Tuning
[Pgday.Seoul 2020] SQL Tuning[Pgday.Seoul 2020] SQL Tuning
[Pgday.Seoul 2020] SQL Tuning
 
pg_proctab: Accessing System Stats in PostgreSQL
pg_proctab: Accessing System Stats in PostgreSQLpg_proctab: Accessing System Stats in PostgreSQL
pg_proctab: Accessing System Stats in PostgreSQL
 
prohuddle-utPLSQL v3 - Ultimate unit testing framework for Oracle
prohuddle-utPLSQL v3 - Ultimate unit testing framework for Oracleprohuddle-utPLSQL v3 - Ultimate unit testing framework for Oracle
prohuddle-utPLSQL v3 - Ultimate unit testing framework for Oracle
 
[Pycon KR 2017] Rst와 함께하는 Python 문서 작성 & OpenStack 문서 활용 사례
[Pycon KR 2017] Rst와 함께하는 Python 문서 작성 & OpenStack 문서 활용 사례[Pycon KR 2017] Rst와 함께하는 Python 문서 작성 & OpenStack 문서 활용 사례
[Pycon KR 2017] Rst와 함께하는 Python 문서 작성 & OpenStack 문서 활용 사례
 
The MySQL Query Optimizer Explained Through Optimizer Trace
The MySQL Query Optimizer Explained Through Optimizer TraceThe MySQL Query Optimizer Explained Through Optimizer Trace
The MySQL Query Optimizer Explained Through Optimizer Trace
 
PHP Performance Trivia
PHP Performance TriviaPHP Performance Trivia
PHP Performance Trivia
 
Top jcl interview questions and answers job interview tips
Top jcl interview questions and answers job interview tipsTop jcl interview questions and answers job interview tips
Top jcl interview questions and answers job interview tips
 
MySQL Functions
MySQL FunctionsMySQL Functions
MySQL Functions
 
Sql injection
Sql injectionSql injection
Sql injection
 
PL/SQL Code for Sample Projects
PL/SQL Code for Sample ProjectsPL/SQL Code for Sample Projects
PL/SQL Code for Sample Projects
 
[2019] 게임 서버 대규모 부하 테스트와 모니터링 이렇게 해보자
[2019] 게임 서버 대규모 부하 테스트와 모니터링 이렇게 해보자[2019] 게임 서버 대규모 부하 테스트와 모니터링 이렇게 해보자
[2019] 게임 서버 대규모 부하 테스트와 모니터링 이렇게 해보자
 
이승재, 사례로 배우는 디스어셈블리 디버깅, NDC2014
이승재, 사례로 배우는 디스어셈블리 디버깅, NDC2014이승재, 사례로 배우는 디스어셈블리 디버깅, NDC2014
이승재, 사례로 배우는 디스어셈블리 디버깅, NDC2014
 
Polymorphism in c++ ppt (Powerpoint) | Polymorphism in c++ with example ppt |...
Polymorphism in c++ ppt (Powerpoint) | Polymorphism in c++ with example ppt |...Polymorphism in c++ ppt (Powerpoint) | Polymorphism in c++ with example ppt |...
Polymorphism in c++ ppt (Powerpoint) | Polymorphism in c++ with example ppt |...
 
The New JavaScript: ES6
The New JavaScript: ES6The New JavaScript: ES6
The New JavaScript: ES6
 
[Practical] Functional Programming in Rails
[Practical] Functional Programming in Rails[Practical] Functional Programming in Rails
[Practical] Functional Programming in Rails
 

En vedette

En vedette (17)

(쿼리 변환, Query Transformation,서브쿼리푸시,SubQuery Pushing)SQL튜닝을 위해 서브쿼리의 드라이빙을 제어...
(쿼리 변환, Query Transformation,서브쿼리푸시,SubQuery Pushing)SQL튜닝을 위해 서브쿼리의 드라이빙을 제어...(쿼리 변환, Query Transformation,서브쿼리푸시,SubQuery Pushing)SQL튜닝을 위해 서브쿼리의 드라이빙을 제어...
(쿼리 변환, Query Transformation,서브쿼리푸시,SubQuery Pushing)SQL튜닝을 위해 서브쿼리의 드라이빙을 제어...
 
(추천오라클힌트교육)해시조인, Hash join, use_hash, ordered
(추천오라클힌트교육)해시조인, Hash join, use_hash, ordered(추천오라클힌트교육)해시조인, Hash join, use_hash, ordered
(추천오라클힌트교육)해시조인, Hash join, use_hash, ordered
 
(오라클힌트,SQL튜닝강좌#25)오라클WITH구문,서브쿼리 팩토링
(오라클힌트,SQL튜닝강좌#25)오라클WITH구문,서브쿼리 팩토링(오라클힌트,SQL튜닝강좌#25)오라클WITH구문,서브쿼리 팩토링
(오라클힌트,SQL튜닝강좌#25)오라클WITH구문,서브쿼리 팩토링
 
(오라클SQL기초강좌)상관 서브쿼리(Correlated Sub Query)
(오라클SQL기초강좌)상관 서브쿼리(Correlated Sub Query)(오라클SQL기초강좌)상관 서브쿼리(Correlated Sub Query)
(오라클SQL기초강좌)상관 서브쿼리(Correlated Sub Query)
 
(스프링초보자를위한)스프링 컨텍스트 설정과 관련된 어노테이션
(스프링초보자를위한)스프링 컨텍스트 설정과 관련된 어노테이션(스프링초보자를위한)스프링 컨텍스트 설정과 관련된 어노테이션
(스프링초보자를위한)스프링 컨텍스트 설정과 관련된 어노테이션
 
자바모델 클래스에 날개를달자_롬복(Lombok)
자바모델 클래스에 날개를달자_롬복(Lombok)자바모델 클래스에 날개를달자_롬복(Lombok)
자바모델 클래스에 날개를달자_롬복(Lombok)
 
스프링컨트롤러예외처리,@ExceptionHandler, @ControllerAdvice
스프링컨트롤러예외처리,@ExceptionHandler, @ControllerAdvice스프링컨트롤러예외처리,@ExceptionHandler, @ControllerAdvice
스프링컨트롤러예외처리,@ExceptionHandler, @ControllerAdvice
 
JPA 상속관계 매핑(@MappedSuperclass, @Inheritance,@DiscriminatorValue,@Discriminato...
JPA 상속관계 매핑(@MappedSuperclass, @Inheritance,@DiscriminatorValue,@Discriminato...JPA 상속관계 매핑(@MappedSuperclass, @Inheritance,@DiscriminatorValue,@Discriminato...
JPA 상속관계 매핑(@MappedSuperclass, @Inheritance,@DiscriminatorValue,@Discriminato...
 
(IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
(IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)(IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
(IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
 
#18.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#18.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...#18.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#18.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
 
#27.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#27.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...#27.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#27.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
 
(스프링교육/마이바티스교육학원추천_탑크리에듀)#10.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
(스프링교육/마이바티스교육학원추천_탑크리에듀)#10.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)(스프링교육/마이바티스교육학원추천_탑크리에듀)#10.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
(스프링교육/마이바티스교육학원추천_탑크리에듀)#10.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
 
#19.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#19.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...#19.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#19.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
 
(국비지원학원/재직자교육/실업자교육/IT실무교육_탑크리에듀)#4.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
(국비지원학원/재직자교육/실업자교육/IT실무교육_탑크리에듀)#4.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)(국비지원학원/재직자교육/실업자교육/IT실무교육_탑크리에듀)#4.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
(국비지원학원/재직자교육/실업자교육/IT실무교육_탑크리에듀)#4.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
 
(국비지원/실업자교육/재직자교육/스프링교육/마이바티스교육추천)#13.스프링프레임워크 & 마이바티스 (Spring Framework, MyB...
(국비지원/실업자교육/재직자교육/스프링교육/마이바티스교육추천)#13.스프링프레임워크 & 마이바티스 (Spring Framework, MyB...(국비지원/실업자교육/재직자교육/스프링교육/마이바티스교육추천)#13.스프링프레임워크 & 마이바티스 (Spring Framework, MyB...
(국비지원/실업자교육/재직자교육/스프링교육/마이바티스교육추천)#13.스프링프레임워크 & 마이바티스 (Spring Framework, MyB...
 
#2.SQL초보에서 Schema Objects까지_재직자/근로자환급/국비지원교육/IT실무교육/SQL기초교육/구로IT학원추천
#2.SQL초보에서 Schema Objects까지_재직자/근로자환급/국비지원교육/IT실무교육/SQL기초교육/구로IT학원추천#2.SQL초보에서 Schema Objects까지_재직자/근로자환급/국비지원교육/IT실무교육/SQL기초교육/구로IT학원추천
#2.SQL초보에서 Schema Objects까지_재직자/근로자환급/국비지원교육/IT실무교육/SQL기초교육/구로IT학원추천
 
#16.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#16.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...#16.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#16.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
 

Similaire à (SQL초보자를 위한, 쿼리최적화 for SQL튜닝)SQL쿼리작성Tip,최적화팁,최적화된SQL작성방법교육

효율적인Sql작성방법 4주차
효율적인Sql작성방법 4주차효율적인Sql작성방법 4주차
효율적인Sql작성방법 4주차
희동 강
 
효율적인Sql작성방법 3주차
효율적인Sql작성방법 3주차효율적인Sql작성방법 3주차
효율적인Sql작성방법 3주차
희동 강
 
효율적인Sql작성방법 2주차
효율적인Sql작성방법 2주차효율적인Sql작성방법 2주차
효율적인Sql작성방법 2주차
희동 강
 
1.자료구조와 알고리즘(강의자료)
1.자료구조와 알고리즘(강의자료)1.자료구조와 알고리즘(강의자료)
1.자료구조와 알고리즘(강의자료)
fmbvbfhs
 
제1회 Tech Net Sql Server 2005 T Sql Enhancements
제1회 Tech Net Sql Server 2005 T Sql Enhancements제1회 Tech Net Sql Server 2005 T Sql Enhancements
제1회 Tech Net Sql Server 2005 T Sql Enhancements
beamofhope
 

Similaire à (SQL초보자를 위한, 쿼리최적화 for SQL튜닝)SQL쿼리작성Tip,최적화팁,최적화된SQL작성방법교육 (20)

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)
 
#15.SQL초보에서 Schema Objects까지_국비지원IT학원/구로IT학원/실무교육학원/SQL교육/오라클교육
#15.SQL초보에서 Schema Objects까지_국비지원IT학원/구로IT학원/실무교육학원/SQL교육/오라클교육#15.SQL초보에서 Schema Objects까지_국비지원IT학원/구로IT학원/실무교육학원/SQL교육/오라클교육
#15.SQL초보에서 Schema Objects까지_국비지원IT학원/구로IT학원/실무교육학원/SQL교육/오라클교육
 
효율적인Sql작성방법 4주차
효율적인Sql작성방법 4주차효율적인Sql작성방법 4주차
효율적인Sql작성방법 4주차
 
오라클강의/자바강의/닷넷강의/자마린교육/아두이노교육학원추천_#13.SQL초보에서 Schema Objects까지
오라클강의/자바강의/닷넷강의/자마린교육/아두이노교육학원추천_#13.SQL초보에서 Schema Objects까지오라클강의/자바강의/닷넷강의/자마린교육/아두이노교육학원추천_#13.SQL초보에서 Schema Objects까지
오라클강의/자바강의/닷넷강의/자마린교육/아두이노교육학원추천_#13.SQL초보에서 Schema Objects까지
 
효율적인Sql작성방법 3주차
효율적인Sql작성방법 3주차효율적인Sql작성방법 3주차
효율적인Sql작성방법 3주차
 
복수행 서브쿼리
복수행 서브쿼리복수행 서브쿼리
복수행 서브쿼리
 
#6.SQL초보에서 Schema Objects까지_구로IT학원/오라클교육/자바교육/국비지원/재직자환급교육/내일배움카드/사업주위탁
#6.SQL초보에서 Schema Objects까지_구로IT학원/오라클교육/자바교육/국비지원/재직자환급교육/내일배움카드/사업주위탁#6.SQL초보에서 Schema Objects까지_구로IT학원/오라클교육/자바교육/국비지원/재직자환급교육/내일배움카드/사업주위탁
#6.SQL초보에서 Schema Objects까지_구로IT학원/오라클교육/자바교육/국비지원/재직자환급교육/내일배움카드/사업주위탁
 
1.8 튜닝의도구 dbms xplan
1.8 튜닝의도구 dbms xplan1.8 튜닝의도구 dbms xplan
1.8 튜닝의도구 dbms xplan
 
3.2 실행계획 sql 연산 (concatenation)
3.2 실행계획 sql 연산 (concatenation)3.2 실행계획 sql 연산 (concatenation)
3.2 실행계획 sql 연산 (concatenation)
 
#12.SQL초보에서 schema Objects까지(구로IT학원/IT실무교육학원/국비지원IT교육학원/오라클교육/자바교육/닷넷교육학원추천)
#12.SQL초보에서 schema Objects까지(구로IT학원/IT실무교육학원/국비지원IT교육학원/오라클교육/자바교육/닷넷교육학원추천)#12.SQL초보에서 schema Objects까지(구로IT학원/IT실무교육학원/국비지원IT교육학원/오라클교육/자바교육/닷넷교육학원추천)
#12.SQL초보에서 schema Objects까지(구로IT학원/IT실무교육학원/국비지원IT교육학원/오라클교육/자바교육/닷넷교육학원추천)
 
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)
 
2.1 optimizer mode를 변경하는 힌트(rule)
2.1 optimizer mode를 변경하는 힌트(rule)2.1 optimizer mode를 변경하는 힌트(rule)
2.1 optimizer mode를 변경하는 힌트(rule)
 
#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주차
 
제 7회 엑셈 수요 세미나 자료 연구컨텐츠팀
제 7회 엑셈 수요 세미나 자료 연구컨텐츠팀제 7회 엑셈 수요 세미나 자료 연구컨텐츠팀
제 7회 엑셈 수요 세미나 자료 연구컨텐츠팀
 
Python machine learning_chap05_7
Python machine learning_chap05_7Python machine learning_chap05_7
Python machine learning_chap05_7
 
(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_오...
 
1.자료구조와 알고리즘(강의자료)
1.자료구조와 알고리즘(강의자료)1.자료구조와 알고리즘(강의자료)
1.자료구조와 알고리즘(강의자료)
 
#1.SQL초보에서 Schema Objects까지(SQL학원/오라클학원/IT실무교육학원/재직자/실업자교육학원추천)
#1.SQL초보에서 Schema Objects까지(SQL학원/오라클학원/IT실무교육학원/재직자/실업자교육학원추천)#1.SQL초보에서 Schema Objects까지(SQL학원/오라클학원/IT실무교육학원/재직자/실업자교육학원추천)
#1.SQL초보에서 Schema Objects까지(SQL학원/오라클학원/IT실무교육학원/재직자/실업자교육학원추천)
 
제1회 Tech Net Sql Server 2005 T Sql Enhancements
제1회 Tech Net Sql Server 2005 T Sql Enhancements제1회 Tech Net Sql Server 2005 T Sql Enhancements
제1회 Tech Net Sql Server 2005 T Sql Enhancements
 

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

(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
탑크리에듀(구로디지털단지역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분거리)
 
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
탑크리에듀(구로디지털단지역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분거리)
 
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
탑크리에듀(구로디지털단지역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분거리)
 

Plus de 탑크리에듀(구로디지털단지역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(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
 

(SQL초보자를 위한, 쿼리최적화 for SQL튜닝)SQL쿼리작성Tip,최적화팁,최적화된SQL작성방법교육

  • 1. 오라클 SQL 최적화 TIP SQL튜닝을 위한 필수 지식 작성자 : 이종철, 탑크리에듀(topcredu.co.kr)
  • 2. 실습테이블(MYEMP1) 칼럼이름 데이터 타입 Key Type NN/ Unique FK table FK column 설명 EMPNO NUMBER PK NN,U 사번 ENAME VARCHAR2(100) NN 이름 DEPTNO VARCHAR2(1) FK MYDEPT1 DEPTNO 부서코드 ADDR VARCHAR2(100) 주소 SAL NUMBER(7) 급여 JOB VARCHAR2(20) 직무 COMM NUMBER(7) 수당 SUNGBYUL VARCHAR2(1) 성별 (M : 남, F : 여) HIREDATE DATE 입사일자 OUTDATE VARCHAR2(8) 퇴사일자 MGR NUMBER FK MYEMP1 EMPNO 관리자사번
  • 3. 실습테이블(MYDEPT1) 칼럼이름 데이터 타입 Key Type NN/ Unique FK table FK column 설명 DEPTNO VARCHAR2(1) PK NN,U 부서코드 DNAME VARCHAR2(100) 부서명 UP_DEPTNO VARCHAR2(1) FK MYDEPT1 DEPTNO 상위 부서코드 실습 데이터 생성 http://ojc.asia/bbs/board.php?bo_table=LecHINT&wr_id=117&page=5 테스트 환경 : 오라클11g R2
  • 4. 인덱스 생성 현황 1. MYEMP1 테이블(1000만건) 의 인덱스 생성 현황 SELECT A.INDEX_NAME, A.COLUMN_NAME, B.VISIBILITY FROM USER_IND_COLUMNS A, USER_INDEXES B WHERE A.TABLE_NAME = 'MYEMP1' AND A.INDEX_NAME = B.INDEX_NAME; • PK_MYEMP1 EMPNO VISIBLE • IDX_MYEMP1_ENAME ENAME VISIBLE • IDX_MYEMP1_SAL SAL VISIBLE • IDX_MYEMP1_DEPTNO DEPTNO VISIBLE • IDX_MYEMP1_JOB JOB VISIBLE • IDX_MYEMP1_MGR MGR VISIBLE 2. MYDEPT1 테이블(7건)의 인덱스 생성 현황 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; • PK_MYDEPT1 DEPTNO VISIBLE
  • 5. 1. 인덱스된 컬럼을 포함하는 표현식,함수, 계산식 WHERE SUBSTR(ename,1,3) = 'SCO'  WHERE ename LIKE 'SCO%' WHERE TRUNC (hiredate) = TRUNC (SYSDATE)  WHERE hiredate BETWEEN TRUNC (SYSDATE) AND TRUNC (SYSDATE) + .99999 WHERE ename || job = 'FORDCLERK'  WHERE ename = 'FORD’ AND job = ‘CLERK’ WHERE sal + 1000 < 2000  WHERE sal < 1000  인덱스된 컬럼을 포함하는 표현(EXPRESSION), 함수, 계산(CALCULATIONS)은 인덱스를 사용하지 못한다. 인덱스 칼럼 보다는 반대쪽에 변형을 가하자.
  • 6. 2. SELECT절에서 DISTINCT 사용은 피하자. -- 1.4초 SELECT DISTINCT d.dname FROM mydept1 D, myemp1 E WHERE D.deptno = E.deptno; -- 0초 SELECT d.dname FROM mydept1 D WHERE EXISTS (SELECT 1 FROM myemp1 E WHERE D.deptno = e.deptno);[결과] 개발1팀 기획1팀 기획2팀 개발2팀
  • 7. 3. WHERE절 비교칼럼 데이터타입은 일치시켜라. -- deptno칼럼은 문자칼럼, 아래 WHERE절은 to_number(deptno) = 1 과 – --동일하므로 deptno 칼럼의 인덱스는 사용되지 못한다. -- 1.4초 SELECT COUNT(1) FROM myemp1 WHERE deptno = 1; -- deptno 칼럼의 인덱스 사용가능하다. -- 0.2초 SELECT COUNT(1) FROM myemp1 WHERE deptno = '1';
  • 8. 4. OUTER JOIN, IS NULL을 이용한 안티조인 보다는 NOT IN, NOT EXISTS를 사용하자. -- 1.6초 select d.deptno,dname from myemp1 e, mydept1 d where e.deptno(+) = d.deptno and e.empno is null; -- 0초 select dname from mydept1 where deptno not in (select deptno from myemp1 where deptno is not null ) -- 0초 select dname from mydept1 d where not exists ( select * from myemp1 e where e.deptno = d.deptno );
  • 9. 5. OUTER JOIN, UNION ALL로 FULL OUTER JOIN을 구현하 기 보다는 FULL OUTER JOIN 구문을 사용하자. -- 6초 SELECT empno, ename, d.deptno, dname FROM myemp1 e, mydept1 d WHERE e.deptno(+) = d.deptno UNION ALL -- MYEMP1 테이블에서 MYDEPT1 테이블에 없는 DEPTNO를 가지고 있는 데이터 추출 SELECT empno, ename, e.deptno, NULL FROM myemp1 e, mydept1 d WHERE e.deptno = d.deptno(+) AND d.deptno IS NULL ORDER BY empno, ename, deptno, dname; -- 4.8초 SELECT empno, ename, NVL(d.deptno,d.deptno) deptno, dname FROM myemp1 e FULL OUTER JOIN mydept1 d ON (e.deptno = d.deptno) ORDER BY empno, ename, deptno, dname;
  • 10. 6. IN을 이용한 조인 보다는 EXISTS를 사용하자. -- 3.6초 SELECT count(ename) FROM myemp1 e1 WHERE empno IN (SELECT mgr FROM myemp1 e2); -- 1.3초 SELECT count(ename) FROM myemp1 e1 WHERE EXISTS (SELECT 1 from myemp1 e2 WHERE e1.mgr = e2.empno);
  • 11. 7. UNION 보다는 UNION ALL을 사용하라. -- 10초 SELECT empno, ename, d.deptno, dname FROM myemp1 e, mydept1 d WHERE e.deptno(+) = d.deptno UNION SELECT empno, ename, e.deptno, NULL FROM myemp1 e, mydept1 d WHERE e.deptno = d.deptno(+) AND d.deptno IS NULL; -- 0초 SELECT empno, ename, d.deptno, dname FROM myemp1 e, mydept1 d WHERE e.deptno(+) = d.deptno UNION ALL SELECT empno, ename, e.deptno, NULL FROM myemp1 e, mydept1 d WHERE e.deptno = d.deptno(+) AND d.deptno IS NULL;
  • 12. 8. 조인되는 건수가 작다면 일반적인 조인보다 스칼라 서브쿼리 사용도 고려하라. -- 1.1초 SELECT (d.dname) FROM myemp1 e, mydept1 d WHERE e.deptno = d.deptno AND e.sal > 5800000; -- 0.8초 SELECT (select dname from mydept1 d where d.deptno = e.deptno) FROM myemp1 e WHERE e.sal > 5800000;
  • 13. 9. MYEMP1에서 사번오름차순으로 사번, 사원명, 급여 를 출력하는 쿼리 작성 -- 3.5초 -- empno 칼럼의 PK 인덱스 사용못했다. -- FULL SCAN 후 정렬하므로 성능저하. SELECT empno, ename, sal FROM myemp1 ORDER BY empno; -- 0초 -- 인덱스 영역에서 스캔 하도록 힌트사용 SELECT /*+ index(e pk_myemp1) */ empno, ename, sal FROM myemp1 e ORDER BY empno; -- order by절은 생략해도 된다. 인덱스영역은 이미 데이 터가 정렬되어 보관되므로 따로 정렬할 필요없다.
  • 14. 10. 인덱스없이 COUNT 여러 번 실행시 통합해서 COUNT CASE를 이용하자. 1. sal 칼럼에 인덱스가 있는 경우 -- 0.071초 select count(1) from myemp1 where sal < 100000; -- 0.14초 select count(1) from myemp1 where sal between 5000000 and 6000000; -- 1.62초,인덱스가 있을 땐 통합하면 더 느림 select count( case when sal < 1000000 then 1 else null end) cnt1, count( case when sal between 5000000 and 6000000 then 1 else null end) cnt2 from myemp1; 2. sal 칼럼에 인덱스가 없는 경우 alter index idx_myemp1_sal invisible ; -- 1.8초 select count(1) from myemp1 where sal < 100000; -- 1.4초 select count(1) from myemp1 where sal between 5000000 and 6000000; -- 1.58초 select count( case when sal < 1000000 then 1 else null end) cnt1, count( case when sal between 5000000 and 6000000 then 1 else null end) cnt2 from myemp1;
  • 15. 11. 인덱스 칼럼을 WHERE절에서 사용시 OR를 UNION ALL로 -- 3.555초 SELECT e1.ename FROM myemp1 e1, myemp1 e2 WHERE e1.ename = e2.ename OR e1.sal = e2.sal; -- 3.048초 -- 인덱스가 생성된 칼럼에 대해 or 로 WHERE절을 사용하는 경우 union all을 사용하는것이 조금 빠름. SELECT e1.ename FROM myemp1 e1, myemp1 e2 WHERE e1.ename = e2.ename union all SELECT e1.ename FROM myemp1 e1, myemp1 e2 WHERE e1.sal = e2.sal;
  • 16. 12. 그룹핑시 HAVING 보다 WHERE절로 조건검색을 -- 2.7초 -- Having절은 SELECT에서 사용하지 말자. select deptno, avg(sal) from myemp1 group by deptno having deptno = '1'; -- 1.7 select deptno, avg(sal) from myemp1 where deptno = '1' group by deptno;
  • 17. 13. 공통쿼리는 WITH문으로 통합하자. -- 인라인뷰를 이용한 경우, 7초 SELECT e.ename AS employee_name, emps1.emp_count , m.ename AS manager_name, emps2.emp_count FROM myemp1 e, (SELECT deptno, COUNT(*) AS emp_count FROM myemp1 GROUP BY deptno) emps1, myemp1 m, (SELECT deptno, COUNT(*) AS emp_count FROM myemp1 GROUP BY deptno) emps2 WHERE e.deptno = emps1.deptno AND e.mgr = m.empno AND m.deptno = emps2.deptno; -- WITH문을 이용한 경우, 4.6초 WITH emp_count AS ( SELECT deptno, COUNT(*) AS dept_count FROM myemp1 GROUP BY deptno ) SELECT e.ename, emps1.dept_count, m.ename, emps2.dept_count FROM myemp1 e, emp_count emps1, myemp1 m, emp_count emps2 WHERE e.deptno = emps1.deptno AND e.mgr = m.empno AND m.deptno = emps2.deptno;
  • 18. 14. 여러 칼럼으로 구성된 복합인덱스 사용시 INDEX 힌 트를 적절히 사용하여 인덱스를 취사선택하자. CREATE TABLE INDEXTEST ( A1 NUMBER NOT NULL, A2 NUMBER NOT NULL, A3 VARCHAR2(50) NOT NULL, A4 VARCHAR2(100)); -- 100만건 생성 INSERT INTO INDEXTEST SELECT MOD(ROWNUM-1, 90) * 4 A1, ROWNUM - 1 A2, TO_CHAR(ROWNUM - 1, 'RN') A3, LPAD('A',100,'A') A4 FROM DUAL CONNECT BY LEVEL<=1000000; -- 실습을 위한 인덱스 생성 CREATE INDEX IDX_IT_1_2 ON INDEXTEST(A1,A2); CREATE INDEX IDX_IT_1_2_3 ON INDEXTEST(A1,A2,A3); CREATE INDEX IDX_IT_3_1_2 ON INDEXTEST(A3,A1,A2); 실습예문 : http://ojc.asia/bbs/board.php?bo_table=LecHINT&wr_id=222&page=2 -- 먼저 힌트를 사용하지 않은 쿼리를 보자. -- A2, A1, A3 복합 인덱스를 사용한다. SELECT A1, A2, A3 FROM INDEXTEST -- A1, A2 칼럼에 있는 인덱스를 사용하라는 힌트사용 -- A1, A2 복합인덱스를 이용한다. SELECT /*+ index(INDEXTEST (A1, A2)) */ A1, A2, A3 FROM INDEXTEST;
  • 19. 15. TOP-N 쿼리(급여 상위 5명) – 인덱스 힌트를 이용하자 -- 급여 상위 5명의 이름, 급여출력 -- 1.4초 SELECT rownum, ename ,sal FROM ( SELECT ename ,sal FROM myemp1 ORDER BY sal DESC) e WHERE rownum <= 5 ; -- 급여 상위 5명의 이름, 급여출력 -- INDEX_DESC 힌트이용, 0초 SELECT rownum, ename ,sal FROM ( SELECT /*+ index_desc(e1 idx_myemp1_sal) */ e1. ename ,e1.sal FROM myemp1 e1 WHERE e1.sal > 0 ORDER BY e1.sal DESC) e WHERE rownum <= 5 ;
  • 20. 16. PAGINATION 쿼리 – 인덱스 힌트를 이용하자 -- order by 사용, 인덱스 사용못함, 4.5초 SELECT empno, ename, sal FROM (SELECT empno, ename, sal , ROWNUM rnum FROM (SELECT empno, ename, sal FROM myemp1 ORDER BY sal desc) e WHERE ROWNUM <= 1000*10) WHERE rnum >= 999*10+1 ; -- 인덱스 사용하기 위한 힌트 사용, 0초 select empno, ename, sal from ( select /*+ index_desc(e1 idx_myemp1_sal) */ rownum rnum, empno, ename, sal from myemp1 e1 where sal > 0 and rownum <= 1000*10 ) where rnum >= 999*10+1; myemp1 테이블에서 sal가 높은것부터 작은것 순서로 한페이지에 10개씩 리스트를 보인다고 했을 때 1000번째 페이지를 SELECT하는 쿼리를 만드세요.
  • 21. THIS PRACTICE MAKES EXPERT! PL/SQL단기속성(1일완성)SQL힌트/튜닝(단기2일교육)SQL기초과정