82
SQL 튜튜 구구구 ( 구 구구구구구 ) 구구 / 구구 구구구구 구구구 , 구구구 , 구구 , 구구구 , 구구구 , 구구구 , 구구구 , 구구구 ◀ DNA 구구 구구구구 2016 구 6 구 17 구 구구구구구구 구구구 구구구 구구 구구 구구 구구 http://www.gurubee.net/

데이타베이스 기본튜닝

Embed Size (px)

Citation preview

Page 1: 데이타베이스 기본튜닝

SQL 튜닝구루비 ( 前 오라클클럽 ) 경기 / 수원 스터디팀

박진욱 , 이준구 , 유진 , 권도현 , 박호진 , 박종인 , 김동우 , 손형래

◀ DNA 형상 케릭터들

2016 년 6 월 17 일 대전정부청사 전산직 공무원 대상 강의 자료 사용

http://www.gurubee.net/

Page 2: 데이타베이스 기본튜닝

발표 순서1. 유전자 분석과 데이타베이스2. 한장으로 보는 데이타베이스 내용3. 튜닝 핵심 항목4. 튜닝 포인트5. 한장으로 보는 데이타베이스 내용들6. BREAK TIME

7. 정량적 튜닝 실습8. 데이타베이스 아키텍처 9. AWR 를 이용한 튜닝10. SQL 튜닝11. 기타 12. 첨부 확인

Page 3: 데이타베이스 기본튜닝

유전자 분석과 데이타베이스■ 유전자 데이터 크기 이해 - 1 사람 유전자 정보 = 3Gbyte - 100 만명 * 3G = 300TB = 3PB - 1 사람 유전자 정보는 600MB CD 5 장 크기

■ 유전자 데이터 = 현존하는 가장 큰 데이터 = 비정형 데이터 구조 = 0.1% 다른 차이 영역이 사람마다 구간이 전부 다름

■ 유전자 데이터 정형화 = 데이타마이닝 = 데이타베이스

■ 데이타베이스 = 1 억건에서 10 건 조회 = 조회 시간 ( ? ) = 100 억건에서 100 건 조회 = 조회 시간 ( ? )

■ OLPT(Online transaction processing) 환경 = 게시판 = 최고 어려운 기술 = 대용량 분산 처리 = 적용 기술 ( ? )

■ DB 를 이용한 통계 분석 ? 빅데이타 분석 ? 머신러닝 ? 딥러닝 ?

Page 4: 데이타베이스 기본튜닝

튜닝 핵심 항목 ?

조회

삭제

수정

트렌젝션

서버 스펙물리적 I/O

직접율 ( 클러스터링 팩터 )

통계정보

SQL

DBMS

글자 크기에 속지 마세요 !!!

Page 5: 데이타베이스 기본튜닝

튜닝 포인트

SQL > 조회 > 물리적 접근율삭제

수정 트렌젝션

서버 스펙

직접율 ( 클러스터링 팩터 )

통계정보DBMS

입력

Page 6: 데이타베이스 기본튜닝

조회 핵심 포인트

vs

Page 7: 데이타베이스 기본튜닝

조회 핵심 포인트

VS

SELECT 항목명 1 FROM 사원테이블

SELECT * FROM 사원테이블

Page 8: 데이타베이스 기본튜닝

하나의 레코드에서 하나의 칼럼만 읽으려고 해도 레코드가 속한 전체를 읽는 무엇 ?

SQL 성능을 좌우하는 것은 접근하는 무엇의 개수 ?

옵티마이저의 판단에 가장 큰 영향을 미치는 것 ?

옵티마이저의 풀스캔 , 인덱스 결정 기준 ?

입출력 단위 ?

물리적 접근 ?

조회 핵심 포인트

Page 9: 데이타베이스 기본튜닝

한장으로 보는 데이터베이스 내용들DB/DBMS, ORDB/RDB, 모델링 , SQL, DB 아키텍처 , 트랜젝션 , 옵티마이저 , 인덱스 , 조인 , 튜닝

DML > DDL > DCL > TCL

1~5 차 정규화반정규화

테이블 , 속성 , 관계

* 모델러 기본 자질은 고객과 원활한 소통 능력

허걱

Page 10: 데이타베이스 기본튜닝

BREAK TIME - DDL 튜닝 QUIZ

VARCHAR vs VARCHAR2 vs NVARCHAR2

VARCHAR2(10) vs VARCHAR2(4000)

SELECT field1 FROM MEMBER vs SELECT * FROM MEMBER

FULL SCAN vs INDEX SCAN

Page 11: 데이타베이스 기본튜닝

BREAK TIME - 가변형 문자열 데이타타입 길이 확인

Page 12: 데이타베이스 기본튜닝

정량적 튜닝 실습 – 코드 테이블 생성CREATE TABLE CODE_COMPLEX( flag VARCHAR2(10), code VARCHAR2(10), code_name VARCHAR2(100), parent_code VARCHAR2(10), date_reg DATE, CONSTRAINT PK_CODE_COMPLEX PRIMARY KEY(code));CREATE INDEX IX_CODE_COMPLEX ON CODE_COMPLEX(flag, code);CREATE INDEX IX_CODE_COMPLEX_PARENT_CODE ON CODE_COMPLEX(parent_code);

Page 13: 데이타베이스 기본튜닝

정량적 튜닝 실습 – 사용자 테이블 TYPE1 생성CREATE TABLE MEMBER( user_id VARCHAR2(50), name VARCHAR2(200), age INT, address VARCHAR2(4000), org_code VARCHAR2(10), CONSTRAINT PK_MEMBER PRIMARY KEY(user_id), CONSTRAINT CK_MEMBER_AGE CHECK (age >= 1 AND age < 200), CONSTRAINT FK_MEMBER_CODE_COMPLEX FOREIGN KEY(org_code) REFERENCES CODE_COMPLEX(code));

Page 14: 데이타베이스 기본튜닝

정량적 튜닝 실습 – 사용자 테이블 TYPE2 생성CREATE TABLE MEMBER_CLOB( user_id VARCHAR2(50), name VARCHAR2(200), age INT, address CLOB, org_code VARCHAR2(10), CONSTRAINT PK_MEMBER_CLOB PRIMARY KEY(user_id), CONSTRAINT CK_MEMBER_CLOB_AGE CHECK (age >= 1 AND age < 200), CONSTRAINT FK_MEMBER_CLOB_CODE_COMPLEX FOREIGN KEY(org_code) REFERENCES CODE_COMPLEX(code));

Page 15: 데이타베이스 기본튜닝

정량적 튜닝 실습 – 사용자 테이블 TYPE3 생성CREATE TABLE MEMBER_IOT( user_id VARCHAR2(50), name VARCHAR2(200), age INT, address CLOB, org_code VARCHAR2(10), CONSTRAINT PK_MEMBER_IOT PRIMARY KEY(user_id), CONSTRAINT CK_MEMBER_IOT_AGE CHECK (age >= 1 AND age < 200), CONSTRAINT FK_MEMBER_IOT_CODE_COMPLEX FOREIGN KEY(org_code) REFERENCES CODE_COMPLEX(code)) ORGANIZATION INDEX;

Page 16: 데이타베이스 기본튜닝

정량적 튜닝 실습 – 샘플 데이터 입력INSERT INTO CODE_COMPLEX(flag, code, code_name, parent_code, date_reg) VALUES('ORGCODE', '1324', ' 서대전 영업소 ',

'1000', SYSDATE);

INSERT INTO CODE_COMPLEX(flag, code, code_name, parent_code, date_reg) VALUES('ORGCODE', '1000', ' 대전본부 ', NULL,

SYSDATE);

INSERT INTO MEMBER(user_id, name, age, address, org_code) VALUES('jong', ' 박종화 ', 30, ' 테스트 주소 1', '1324');

INSERT INTO MEMBER(user_id, name, age, address, org_code) VALUES('hong', ' 홍길동 ', 110, ' 테스트 주소 2', '1000');

INSERT INTO MEMBER_CLOB(user_id, name, age, address, org_code) VALUES('jong', ' 박종화 ', 30, ' 테스트 주소 1', '1324');

INSERT INTO MEMBER_CLOB(user_id, name, age, address, org_code) VALUES('hong', ' 홍길동 ', 110, ' 테스트 주소 2', '1000');

INSERT INTO MEMBER_IOT(user_id, name, age, address, org_code) VALUES('jong', ' 박종화 ', 30, ' 테스트 주소 1', '1324');

INSERT INTO MEMBER_IOT(user_id, name, age, address, org_code) VALUES('hong', ' 홍길동 ', 110, ' 테스트 주소 2', '1000');

INSERT INTO SAL(yyyy, user_id, org_code, sal) VALUES('2015', 'jong', '1324', 5000);

INSERT INTO SAL(yyyy, user_id, org_code, sal) VALUES('2016', 'jong', '1324', 6000);

INSERT INTO SAL(yyyy, user_id, org_code, sal) VALUES('2015', 'hong', '1324', 7000);

INSERT INTO SAL(yyyy, user_id, org_code, sal) VALUES('2016', 'hong', '1000', 8000);

Page 17: 데이타베이스 기본튜닝

정량적 튜닝 실습 – 분석 방법1. 예상 실행 계획 - DBMS_XPLAN.DISPLAY

2. 실측 실행 계획 - DBMS_XPLAN.DISPLAY_CURSOR - 10046 TRACE

Page 18: 데이타베이스 기본튜닝

정량적 튜닝 실습 – 예측 분석 / DISPLAY

1. 사용자 생성> CREATE USER c##jubhak2 IDENTIFIED BY dmswls04;

2. 기본 ROLE 부여> GRANT CONNECT, RESOURCE TO c##jubhak2

3. 실행 계획 생성> EXPLAIN PLAN FOR SELECT 1 FROM DUAL;

4. 실행 계획 보기> SELECT * FROM TABLE(> DBMS_XPLAN.DISPLAY()> );

Page 19: 데이타베이스 기본튜닝

정량적 튜닝 실습 – 실측 분석 / DISPLAY_CURSOR

* 단점 - 1 개 SQL 만 가능 - 함수 수행 정보 없음 - 단계별 통계 정보 없음

Page 20: 데이타베이스 기본튜닝

정량적 튜닝 실습 – 실측 분석 / 10046 TRACE1. TRACE 결과 파일을 쉽게 찾을 수 있도록 식별자 설정> ALTER SESSION SET TRACEFILE_IDENTIFIER = ‘test';

2. TRACE 활성화> ALTER SESSION SET TRACEFILE_IDENTIFIER = ‘jubhak';> ALTER SESSION SET TIMED_STATISTICS = TRUE;> ALTER SESSION SET MAX_DUMP_FILE_SIZE = UNLIMITED;> ALTER SESSION SET EVENTS '10046 TRACE NAME CONTEXT FOREVER, LEVEL 12'; // 번호 12 경우 모든 정보 해당

3. SQL 수행> SELECT * FROM TABLE_NAME ...

4. TRACE 비활성화 ( 바로 하지 않으면 필요한 정보만 보기 어려움 )> ALTER SESSION SET EVENTS '10046 TRACE NAME CONTEXT OFF';

5. 생성 파일 확인 / OS 내부 명령> cd [ 오라클 설치 루트 경로 ]> dis/s *jubhak.trc> cd 해당 상세 경로

6. TKPROF 를 이용한 분석 결고 파일 생성 / OS 오라클 외부 COMMAND 명령어> TKPROF …….jubhak.trc result.txt sys=no waits=no aggregate=no;

Page 21: 데이타베이스 기본튜닝

정량적 튜닝 실습 – 실측 분석 / 10046 TRACETKPROF Option

Page 22: 데이타베이스 기본튜닝

정량적 튜닝 실습 – 10046 TRACE 분석 결과call count cpu elapsed disk query current rows------- ------ -------- ---------- ---------- ---------- ---------- ----------Parse 1 0.00 0.00 0 0 0 0Execute 1 0.00 0.00 0 0 0 0Fetch 1 0.00 0.00 0 7 0 50------- ------ -------- ---------- ---------- ---------- ---------- ----------total 3 0.00 0.00 0 7 0 50

Misses in library cache during parse: 0 ▶ 하드 파싱 횟수Optimizer mode: ALL_ROWS ▶ 옵티마이저 모드Parsing user id: 103 ▶ DBA_USERS.USER_ID

Rows (1st) Rows (avg) Rows (max) Row Source Operation---------- ---------- ---------- --------------------------------------------------- 50 50 50 NESTED LOOPS (cr=7 pr=0 pw=0 time=196 us) 50 50 50 NESTED LOOPS (cr=5 pr=0 pw=0 time=88 us cost=50776 size=265893615 card=2272595) 1 1 1 TABLE ACCESS BY INDEX ROWID BATCHED DEPT (cr=2 pr=0 pw=0 time=28 us cost=42 size=120 card=4) 1 1 1 INDEX FULL SCAN PK_DEPT (cr=1 pr=0 pw=0 time=16 us cost=2 size=0 card=4)(object id 99551) 50 50 50 INDEX RANGE SCAN IDX_EMP_DEPTNO (cr=3 pr=0 pw=0 time=59 us cost=978 size=0 card=568149)(object id 99574) 50 50 50 TABLE ACCESS BY INDEX ROWID EMP (cr=2 pr=0 pw=0 time=33 us cost=12684 size=49428963 card=568149)

■ 실행 계획 - CR = QUERY = Logical Read = 메모리에서 읽은 블록 수 - PR = DISK = Physical Read = 디스크에서 읽은 블록 수 - pw = phusical write = 디스크 쓸 때 해당 블록 수 - time(us) = 1/1,000,000 = 소요 시간

■ BCHR(Buffer Cache Hit Ratio) - (((query + current) - disk) / query + current) * 100 - 80%~90% 이상 효율 신뢰

■ 표두 - call : call 종류 - count : 대상 수 - cpu : CPU 처리 시간 - elapsed : 처리 시간 - disk : 디스크 블록 접근 수 - query : 메모리에서 읽은 수 - current : 현 버퍼 캐시 I/O( 주로 DML) - rows : 해당 레코드 수

■ 표측 - Parse : 소프트 / 하드 파싱 - Execute : 실행 - Fetch : 사용자 반환

Page 23: 데이타베이스 기본튜닝

정량적 튜닝 실습 – 분석 결과 / MERGE JOINSELECT /*+ ORDERED USE_MERGE(CT) */ * FROM MEMBER MT, CODE_COMPLEX CT WHERE MT.org_code = CT.code AND CT.flag = 'ORGCODE'call count cpu elapsed disk query current rows------- ------ -------- ---------- ---------- ---------- ---------- ----------Parse 1 0.00 0.00 0 4 0 0Execute 1 0.00 0.00 0 0 0 0Fetch 1 0.00 0.00 0 9 0 2------- ------ -------- ---------- ---------- ---------- ---------- ----------total 3 0.00 0.00 0 13 0 2Misses in library cache during parse: 1Rows Row Source Operation------- --------------------------------------------------- 2 MERGE JOIN (cr=9 pr=0 pw=0 time=2 us cost=6 size=4466 card=2) 2 SORT JOIN (cr=7 pr=0 pw=0 time=0 us cost=4 size=4302 card=2) 2 TABLE ACCESS FULL MEMBER (cr=7 pr=0 pw=0 time=0 us cost=3 size=4302 card=2) 2 SORT JOIN (cr=2 pr=0 pw=0 time=0 us cost=2 size=164 card=2) 2 TABLE ACCESS BY INDEX ROWID CODE_COMPLEX (cr=2 pr=0 pw=0 time=1 us cost=1 size=164 card=2) 2 INDEX RANGE SCAN IX_CODE_COMPLEX (cr=1 pr=0 pw=0 time=1 us cost=1 size=0 card=2)(object id 98203)

SELECT /*+ LEADING(MT) USE_MERGE(CT) */ * FROM MEMBER MT, CODE_COMPLEX CT WHERE MT.org_code = CT.code AND CT.flag = 'ORGCODE‘call count cpu elapsed disk query current rows------- ------ -------- ---------- ---------- ---------- ---------- ----------Parse 1 0.01 0.00 0 4 0 0Execute 1 0.00 0.00 0 0 0 0Fetch 1 0.00 0.00 0 9 0 2------- ------ -------- ---------- ---------- ---------- ---------- ----------total 3 0.01 0.00 0 13 0 2Misses in library cache during parse: 1Rows Row Source Operation------- --------------------------------------------------- 2 MERGE JOIN (cr=9 pr=0 pw=0 time=4 us cost=6 size=4466 card=2) 2 SORT JOIN (cr=7 pr=0 pw=0 time=0 us cost=4 size=4302 card=2) 2 TABLE ACCESS FULL MEMBER (cr=7 pr=0 pw=0 time=0 us cost=3 size=4302 card=2) 2 SORT JOIN (cr=2 pr=0 pw=0 time=0 us cost=2 size=164 card=2) 2 TABLE ACCESS BY INDEX ROWID CODE_COMPLEX (cr=2 pr=0 pw=0 time=2 us cost=1 size=164 card=2) 2 INDEX RANGE SCAN IX_CODE_COMPLEX (cr=1 pr=0 pw=0 time=1 us cost=1 size=0 card=2)(object id 98203)

SELECT /*+ USE_MERGE(CT, MT) */ * FROM MEMBER MT, CODE_COMPLEX CT WHERE MT.org_code = CT.code AND CT.flag = 'ORGCODE'call count cpu elapsed disk query current rows------- ------ -------- ---------- ---------- ---------- ---------- ----------Parse 1 0.00 0.00 0 4 0 0Execute 1 0.00 0.00 0 0 0 0Fetch 1 0.00 0.00 0 9 0 2------- ------ -------- ---------- ---------- ---------- ---------- ----------total 3 0.00 0.00 0 13 0 2Misses in library cache during parse: 1Rows Row Source Operation------- --------------------------------------------------- 2 MERGE JOIN (cr=9 pr=0 pw=0 time=2 us cost=5 size=4466 card=2) 2 TABLE ACCESS BY INDEX ROWID CODE_COMPLEX (cr=2 pr=0 pw=0 time=1 us cost=1 size=164 card=2) 2 INDEX RANGE SCAN IX_CODE_COMPLEX (cr=1 pr=0 pw=0 time=0 us cost=1 size=0 card=2)(object id 98203) 2 SORT JOIN (cr=7 pr=0 pw=0 time=0 us cost=4 size=4302 card=2) 2 TABLE ACCESS FULL MEMBER (cr=7 pr=0 pw=0 time=0 us cost=3 size=4302 card=2)

Page 24: 데이타베이스 기본튜닝

정량적 튜닝 실습 – 분석 결과 / NESTED JOINSELECT /*+ ORDERED USE_NL(CT) */ * FROM MEMBER MT, CODE_COMPLEX CT WHERE MT.org_code = CT.code AND CT.flag = 'ORGCODE‘call count cpu elapsed disk query current rows------- ------ -------- ---------- ---------- ---------- ---------- ----------Parse 1 0.00 0.00 0 4 0 0Execute 1 0.00 0.00 0 0 0 0Fetch 1 0.00 0.00 0 11 0 2------- ------ -------- ---------- ---------- ---------- ---------- ----------total 3 0.00 0.00 0 15 0 2Misses in library cache during parse: 1Rows Row Source Operation------- --------------------------------------------------- 2 NESTED LOOPS (cr=11 pr=0 pw=0 time=5 us) 2 NESTED LOOPS (cr=9 pr=0 pw=0 time=3 us cost=3 size=4466 card=2) 2 TABLE ACCESS FULL MEMBER (cr=7 pr=0 pw=0 time=1 us cost=3 size=4302 card=2) 2 INDEX UNIQUE SCAN IX_CODE_COMPLEX (cr=2 pr=0 pw=0 time=0 us cost=0 size=0 card=1)(object id 98203) 2 TABLE ACCESS BY INDEX ROWID CODE_COMPLEX (cr=2 pr=0 pw=0 time=0 us cost=0 size=82 card=1)

SELECT /*+ LEADING(MT) USE_NL(CT) */ * FROM MEMBER MT, CODE_COMPLEX CT WHERE MT.org_code = CT.code AND CT.flag = 'ORGCODE‘call count cpu elapsed disk query current rows------- ------ -------- ---------- ---------- ---------- ---------- ----------Parse 1 0.00 0.00 0 4 0 0Execute 1 0.00 0.00 0 0 0 0Fetch 1 0.00 0.00 0 11 0 2------- ------ -------- ---------- ---------- ---------- ---------- ----------total 3 0.00 0.00 0 15 0 2Misses in library cache during parse: 1Rows Row Source Operation------- --------------------------------------------------- 2 NESTED LOOPS (cr=11 pr=0 pw=0 time=4 us) 2 NESTED LOOPS (cr=9 pr=0 pw=0 time=3 us cost=3 size=4466 card=2) 2 TABLE ACCESS FULL MEMBER (cr=7 pr=0 pw=0 time=0 us cost=3 size=4302 card=2) 2 INDEX UNIQUE SCAN IX_CODE_COMPLEX (cr=2 pr=0 pw=0 time=0 us cost=0 size=0 card=1)(object id 98203) 2 TABLE ACCESS BY INDEX ROWID CODE_COMPLEX (cr=2 pr=0 pw=0 time=0 us cost=0 size=82 card=1)

SELECT /*+ USE_NL(CT, MT) */ * FROM MEMBER MT, CODE_COMPLEX CT WHERE MT.org_code = CT.code AND CT.flag = 'ORGCODE‘call count cpu elapsed disk query current rows------- ------ -------- ---------- ---------- ---------- ---------- ----------Parse 1 0.00 0.00 0 4 0 0Execute 1 0.00 0.00 0 0 0 0Fetch 1 0.00 0.00 0 11 0 2------- ------ -------- ---------- ---------- ---------- ---------- ----------total 3 0.00 0.00 0 15 0 2Misses in library cache during parse: 1Rows Row Source Operation------- --------------------------------------------------- 2 NESTED LOOPS (cr=11 pr=0 pw=0 time=5 us) 2 NESTED LOOPS (cr=9 pr=0 pw=0 time=3 us cost=3 size=4466 card=2) 2 TABLE ACCESS FULL MEMBER (cr=7 pr=0 pw=0 time=0 us cost=3 size=4302 card=2) 2 INDEX UNIQUE SCAN IX_CODE_COMPLEX (cr=2 pr=0 pw=0 time=0 us cost=0 size=0 card=1)(object id 98203) 2 TABLE ACCESS BY INDEX ROWID CODE_COMPLEX (cr=2 pr=0 pw=0 time=0 us cost=0 size=82 card=1)

Page 25: 데이타베이스 기본튜닝

정량적 튜닝 실습 – 분석 결과 / HASH JOINSELECT /*+ ORDERED USE_HASH(CT) */ * FROM MEMBER MT, CODE_COMPLEX CT WHERE MT.org_code = CT.code AND CT.flag = 'ORGCODE‘call count cpu elapsed disk query current rows------- ------ -------- ---------- ---------- ---------- ---------- ----------Parse 1 0.00 0.00 0 0 0 0Execute 1 0.00 0.00 0 0 0 0Fetch 1 0.00 0.00 0 9 0 2------- ------ -------- ---------- ---------- ---------- ---------- ----------total 3 0.00 0.00 0 9 0 2Misses in library cache during parse: 0Rows Row Source Operation------- --------------------------------------------------- 2 HASH JOIN (cr=9 pr=0 pw=0 time=2 us cost=5 size=4466 card=2) 2 TABLE ACCESS FULL MEMBER (cr=7 pr=0 pw=0 time=0 us cost=3 size=4302 card=2) 2 TABLE ACCESS BY INDEX ROWID CODE_COMPLEX (cr=2 pr=0 pw=0 time=0 us cost=1 size=164 card=2) 2 INDEX RANGE SCAN IX_CODE_COMPLEX (cr=1 pr=0 pw=0 time=0 us cost=1 size=0 card=2)(object id 98203)

SELECT /*+ LEADING(MT) USE_HASH(CT) */ * FROM MEMBER MT, CODE_COMPLEX CT WHERE MT.org_code = CT.code AND CT.flag = 'ORGCODE‘call count cpu elapsed disk query current rows------- ------ -------- ---------- ---------- ---------- ---------- ----------Parse 1 0.00 0.00 0 0 0 0Execute 1 0.00 0.00 0 0 0 0Fetch 1 0.00 0.00 0 9 0 2------- ------ -------- ---------- ---------- ---------- ---------- ----------total 3 0.00 0.00 0 9 0 2Misses in library cache during parse: 0Rows Row Source Operation------- --------------------------------------------------- 2 HASH JOIN (cr=9 pr=0 pw=0 time=1 us cost=5 size=4466 card=2) 2 TABLE ACCESS FULL MEMBER (cr=7 pr=0 pw=0 time=1 us cost=3 size=4302 card=2) 2 TABLE ACCESS BY INDEX ROWID CODE_COMPLEX (cr=2 pr=0 pw=0 time=0 us cost=1 size=164 card=2) 2 INDEX RANGE SCAN IX_CODE_COMPLEX (cr=1 pr=0 pw=0 time=0 us cost=1 size=0 card=2)(object id 98203)

SELECT /*+ USE_HASH(CT, MT) */ * FROM MEMBER MT, CODE_COMPLEX CT WHERE MT.org_code = CT.code AND CT.flag = 'ORGCODE‘call count cpu elapsed disk query current rows------- ------ -------- ---------- ---------- ---------- ---------- ----------Parse 1 0.00 0.00 0 0 0 0Execute 1 0.00 0.00 0 0 0 0Fetch 1 0.00 0.00 0 9 0 2------- ------ -------- ---------- ---------- ---------- ---------- ----------total 3 0.00 0.00 0 9 0 2Misses in library cache during parse: 0Rows Row Source Operation------- --------------------------------------------------- 2 HASH JOIN (cr=9 pr=0 pw=0 time=6 us cost=5 size=4466 card=2) 2 TABLE ACCESS FULL MEMBER (cr=7 pr=0 pw=0 time=0 us cost=3 size=4302 card=2) 2 TABLE ACCESS BY INDEX ROWID CODE_COMPLEX (cr=2 pr=0 pw=0 time=5 us cost=1 size=164 card=2) 2 INDEX RANGE SCAN IX_CODE_COMPLEX (cr=1 pr=0 pw=0 time=2 us cost=1 size=0 card=2)(object id 98203)

Page 26: 데이타베이스 기본튜닝

정량적 튜닝 실습 – 분석 결과 / 사용자 단일 테이블 조회SELECT * FROM MEMBERcall count cpu elapsed disk query current rows------- ------ -------- ---------- ---------- ---------- ---------- ----------Parse 1 0.00 0.00 0 0 0 0Execute 1 0.00 0.00 0 0 0 0Fetch 1 0.00 0.00 0 7 0 2------- ------ -------- ---------- ---------- ---------- ---------- ----------total 3 0.00 0.00 0 7 0 2Misses in library cache during parse: 0Rows Row Source Operation------- --------------------------------------------------- 2 TABLE ACCESS FULL MEMBER (cr=7 pr=0 pw=0 time=1 us cost=3 size=4302 card=2)

SELECT name FROM MEMBERcall count cpu elapsed disk query current rows------- ------ -------- ---------- ---------- ---------- ---------- ----------Parse 1 0.00 0.00 0 1 0 0Execute 1 0.00 0.00 0 0 0 0Fetch 1 0.00 0.00 0 7 0 2------- ------ -------- ---------- ---------- ---------- ---------- ----------total 3 0.00 0.00 0 8 0 2Misses in library cache during parse: 1Rows Row Source Operation------- --------------------------------------------------- 2 TABLE ACCESS FULL MEMBER (cr=7 pr=0 pw=0 time=0 us cost=3 size=204 card=2)

SELECT user_id FROM MEMBERcall count cpu elapsed disk query current rows------- ------ -------- ---------- ---------- ---------- ---------- ----------Parse 1 0.00 0.00 0 2 0 0Execute 1 0.00 0.00 0 0 0 0Fetch 1 0.00 0.00 0 4 0 2------- ------ -------- ---------- ---------- ---------- ---------- ----------total 3 0.00 0.00 0 6 0 2Misses in library cache during parse: 1Rows Row Source Operation------- --------------------------------------------------- 2 INDEX FAST FULL SCAN PK_MEMBER (cr=4 pr=0 pw=0 time=0 us cost=2 size=54 card=2)(object id 98228)

SELECT 1 FROM MEMBERcall count cpu elapsed disk query current rows------- ------ -------- ---------- ---------- ---------- ---------- ----------Parse 1 0.00 0.00 0 2 0 0Execute 1 0.00 0.00 0 0 0 0Fetch 1 0.00 0.00 0 4 0 2------- ------ -------- ---------- ---------- ---------- ---------- ----------total 3 0.00 0.00 0 6 0 2Misses in library cache during parse: 1Rows Row Source Operation------- --------------------------------------------------- 2 INDEX FAST FULL SCAN PK_MEMBER (cr=4 pr=0 pw=0 time=0 us cost=2 size=0 card=2)(object id 98228)

Page 27: 데이타베이스 기본튜닝

정량적 튜닝 실습 – 분석 결과 / CLOB 사용자 단일 테이블 조회SELECT * FROM MEMBER_CLOBcall count cpu elapsed disk query current rows------- ------ -------- ---------- ---------- ---------- ---------- ----------Parse 1 0.00 0.00 0 0 0 0Execute 2 0.00 0.00 0 0 0 0Fetch 1 0.00 0.00 0 7 0 2------- ------ -------- ---------- ---------- ---------- ---------- ----------total 4 0.00 0.00 0 7 0 2Misses in library cache during parse: 0Rows Row Source Operation------- --------------------------------------------------- 2 TABLE ACCESS FULL MEMBER_CLOB (cr=7 pr=0 pw=0 time=2 us cost=3 size=4302 card=2)

SELECT name FROM MEMBER_CLOBcall count cpu elapsed disk query current rows------- ------ -------- ---------- ---------- ---------- ---------- ----------Parse 1 0.00 0.00 0 0 0 0Execute 1 0.00 0.00 0 0 0 0Fetch 1 0.00 0.00 0 7 0 2------- ------ -------- ---------- ---------- ---------- ---------- ----------total 3 0.00 0.00 0 7 0 2Misses in library cache during parse: 0Rows Row Source Operation------- --------------------------------------------------- 2 TABLE ACCESS FULL MEMBER_CLOB (cr=7 pr=0 pw=0 time=0 us cost=3 size=204 card=2)

SELECT user_id FROM MEMBER_CLOBcall count cpu elapsed disk query current rows------- ------ -------- ---------- ---------- ---------- ---------- ----------Parse 1 0.00 0.00 0 0 0 0Execute 1 0.00 0.00 0 0 0 0Fetch 1 0.00 0.00 0 4 0 2------- ------ -------- ---------- ---------- ---------- ---------- ----------total 3 0.00 0.00 0 4 0 2Misses in library cache during parse: 0Rows Row Source Operation------- --------------------------------------------------- 2 INDEX FAST FULL SCAN PK_MEMBER_CLOB (cr=4 pr=0 pw=0 time=0 us cost=2 size=54 card=2)(object id 98232)

SELECT 1 FROM MEMBER_CLOBcall count cpu elapsed disk query current rows------- ------ -------- ---------- ---------- ---------- ---------- ----------Parse 1 0.00 0.00 0 0 0 0Execute 1 0.00 0.00 0 0 0 0Fetch 1 0.00 0.00 0 4 0 2------- ------ -------- ---------- ---------- ---------- ---------- ----------total 3 0.00 0.00 0 4 0 2Misses in library cache during parse: 0Rows Row Source Operation------- --------------------------------------------------- 2 INDEX FAST FULL SCAN PK_MEMBER_CLOB (cr=4 pr=0 pw=0 time=1 us cost=2 size=0 card=2)

Page 28: 데이타베이스 기본튜닝

정량적 튜닝 실습 – 분석 결과 / IOT 사용자 단일 테이블 조회SELECT * FROM MEMBER_IOTcall count cpu elapsed disk query current rows------- ------ -------- ---------- ---------- ---------- ---------- ----------Parse 1 0.00 0.00 0 0 0 0Execute 1 0.00 0.00 0 0 0 0Fetch 1 0.00 0.00 2 10 0 2------- ------ -------- ---------- ---------- ---------- ---------- ----------total 3 0.00 0.00 2 10 0 2Misses in library cache during parse: 0Rows Row Source Operation------- --------------------------------------------------- 2 INDEX FAST FULL SCAN PK_MEMBER_IOT (cr=4 pr=0 pw=0 time=14 us cost=2 size=778 card=2)(object id 98236)

SELECT name FROM MEMBER_IOTcall count cpu elapsed disk query current rows------- ------ -------- ---------- ---------- ---------- ---------- ----------Parse 1 0.00 0.00 0 0 0 0Execute 1 0.00 0.00 0 0 0 0Fetch 1 0.00 0.00 0 4 0 2------- ------ -------- ---------- ---------- ---------- ---------- ----------total 3 0.00 0.00 0 4 0 2Misses in library cache during parse: 0Rows Row Source Operation------- --------------------------------------------------- 2 INDEX FAST FULL SCAN PK_MEMBER_IOT (cr=4 pr=0 pw=0 time=0 us cost=2 size=204 card=2)(object id 98236)

SELECT user_id FROM MEMBER_IOTcall count cpu elapsed disk query current rows------- ------ -------- ---------- ---------- ---------- ---------- ----------Parse 1 0.00 0.00 0 0 0 0Execute 1 0.00 0.00 0 0 0 0Fetch 1 0.00 0.00 0 4 0 2------- ------ -------- ---------- ---------- ---------- ---------- ----------total 3 0.00 0.00 0 4 0 2Misses in library cache during parse: 0Rows Row Source Operation------- --------------------------------------------------- 2 INDEX FAST FULL SCAN PK_MEMBER_IOT (cr=4 pr=0 pw=0 time=0 us cost=2 size=54 card=2)(object id 98236)

SELECT 1 FROM MEMBER_IOTcall count cpu elapsed disk query current rows------- ------ -------- ---------- ---------- ---------- ---------- ----------Parse 1 0.01 0.00 0 0 0 0Execute 1 0.00 0.00 0 0 0 0Fetch 1 0.00 0.00 0 4 0 2------- ------ -------- ---------- ---------- ---------- ---------- ----------total 3 0.01 0.00 0 4 0 2Misses in library cache during parse: 0Rows Row Source Operation------- --------------------------------------------------- 2 INDEX FAST FULL SCAN PK_MEMBER_IOT (cr=4 pr=0 pw=0 time=0 us cost=2 size=0 card=2)(object id 98236)

Page 29: 데이타베이스 기본튜닝

정량적 튜닝 실습 – 분석 결과 / LIST 파티션 테이블 조회SELECT * FROM SALcall count cpu elapsed disk query current rows------- ------ -------- ---------- ---------- ---------- ---------- ----------Parse 1 0.00 0.00 0 2 0 0Execute 1 0.00 0.00 0 0 0 0Fetch 1 0.00 0.00 0 14 0 4------- ------ -------- ---------- ---------- ---------- ---------- ----------total 3 0.00 0.00 0 16 0 4Misses in library cache during parse: 1Rows Row Source Operation------- --------------------------------------------------- 4 PARTITION LIST ALL PARTITION: 1 2 (cr=14 pr=0 pw=0 time=13 us cost=4 size=240 card=4) 4 TABLE ACCESS FULL SAL PARTITION: 1 2 (cr=14 pr=0 pw=0 time=1 us cost=4 size=240 card=4)

SELECT yyyy FROM SALcall count cpu elapsed disk query current rows------- ------ -------- ---------- ---------- ---------- ---------- ----------Parse 1 0.01 0.00 0 3 0 0Execute 1 0.00 0.00 0 0 0 0Fetch 1 0.00 0.00 0 4 0 4------- ------ -------- ---------- ---------- ---------- ---------- ----------total 3 0.01 0.00 0 7 0 4Misses in library cache during parse: 1Rows Row Source Operation------- --------------------------------------------------- 4 INDEX FAST FULL SCAN PK_SAL (cr=4 pr=0 pw=0 time=1 us cost=2 size=52 card=4)

SELECT user_id FROM SALcall count cpu elapsed disk query current rows------- ------ -------- ---------- ---------- ---------- ---------- ----------Parse 1 0.00 0.00 0 3 0 0Execute 1 0.00 0.00 0 0 0 0Fetch 1 0.00 0.00 0 4 0 4------- ------ -------- ---------- ---------- ---------- ---------- ----------total 3 0.00 0.00 0 7 0 4Misses in library cache during parse: 1Rows Row Source Operation------- --------------------------------------------------- 4 INDEX FAST FULL SCAN PK_SAL (cr=4 pr=0 pw=0 time=0 us cost=2 size=108 card=4)

SELECT 1 FROM SALcall count cpu elapsed disk query current rows------- ------ -------- ---------- ---------- ---------- ---------- ----------Parse 1 0.00 0.00 0 3 0 0Execute 1 0.00 0.00 0 0 0 0Fetch 1 0.00 0.00 0 4 0 4------- ------ -------- ---------- ---------- ---------- ---------- ----------total 3 0.00 0.00 0 7 0 4Misses in library cache during parse: 1Rows Row Source Operation------- --------------------------------------------------- 4 INDEX FAST FULL SCAN PK_SAL (cr=4 pr=0 pw=0 time=0 us cost=2 size=0 card=4)

SELECT * FROM SAL WHERE yyyy = 2015call count cpu elapsed disk query current rows------- ------ -------- ---------- ---------- ---------- ---------- ----------Parse 1 0.00 0.00 0 2 0 0Execute 1 0.00 0.00 0 0 0 0Fetch 1 0.00 0.00 0 7 0 2------- ------ -------- ---------- ---------- ---------- ---------- ----------total 3 0.00 0.00 0 9 0 2Misses in library cache during parse: 1Rows Row Source Operation------- --------------------------------------------------- 2 PARTITION LIST SINGLE PARTITION: 1 1 (cr=7 pr=0 pw=0 time=0 us cost=3 size=120 card=2) 2 TABLE ACCESS FULL SAL PARTITION: 1 1 (cr=7 pr=0 pw=0 time=0 us cost=3 size=120 card=2)

SELECT * FROM SAL WHERE yyyy = 2000call count cpu elapsed disk query current rows------- ------ -------- ---------- ---------- ---------- ---------- ----------Parse 1 0.00 0.00 0 2 0 0Execute 1 0.00 0.00 0 0 0 0Fetch 1 0.00 0.00 0 1 0 0------- ------ -------- ---------- ---------- ---------- ---------- ----------total 3 0.00 0.00 0 3 0 0Misses in library cache during parse: 1Rows Row Source Operation------- --------------------------------------------------- 0 TABLE ACCESS BY GLOBAL INDEX ROWID SAL PARTITION: ROW LOCATION ROW LOCATION (cr=1 pr=0 pw=0 time=0 us cost=1 size=60 card=1) 0 INDEX RANGE SCAN PK_SAL (cr=1 pr=0 pw=0 time=0 us cost=1 size=0 card=1)

SELECT * FROM SAL WHERE yyyy = 2015 AND user_id = 'jong‘call count cpu elapsed disk query current rows------- ------ -------- ---------- ---------- ---------- ---------- ----------Parse 1 0.01 0.00 0 0 0 0Execute 1 0.00 0.00 0 0 0 0Fetch 1 0.00 0.00 0 2 0 1------- ------ -------- ---------- ---------- ---------- ---------- ----------total 3 0.01 0.00 0 2 0 1Misses in library cache during parse: 1Rows Row Source Operation------- --------------------------------------------------- 1 TABLE ACCESS BY GLOBAL INDEX ROWID SAL PARTITION: 1 1 (cr=2 pr=0 pw=0 time=0 us cost=1 size=60 card=1) 1 INDEX UNIQUE SCAN PK_SAL (cr=1 pr=0 pw=0 time=0 us cost=1 size=0 card=1)(object id 98166)

SELECT * FROM SAL WHERE yyyy = 2015 AND sal > 1000call count cpu elapsed disk query current rows------- ------ -------- ---------- ---------- ---------- ---------- ----------Parse 1 0.00 0.00 0 3 0 0Execute 1 0.00 0.00 0 0 0 0Fetch 1 0.00 0.00 0 7 0 2------- ------ -------- ---------- ---------- ---------- ---------- ----------total 3 0.00 0.00 0 10 0 2Misses in library cache during parse: 1Rows Row Source Operation------- --------------------------------------------------- 2 PARTITION LIST SINGLE PARTITION: 1 1 (cr=7 pr=0 pw=0 time=1 us cost=3 size=120 card=2) 2 TABLE ACCESS FULL SAL PARTITION: 1 1 (cr=7 pr=0 pw=0 time=1 us cost=3 size=120 card=2)

Page 30: 데이타베이스 기본튜닝

BREAK TIME - 현실 세계 정보화 및 정보 관리 (= 모델링과 SQL 전신 )

Page 31: 데이타베이스 기본튜닝

데이타베이스 아키텍처헐

Page 32: 데이타베이스 기본튜닝

AWR(Automatic Workload Repository) 를 이용한 튜닝산은산이요

Page 33: 데이타베이스 기본튜닝

BREAK TIME - TIP & QUIZ

- DELETE 테이블명 > TRUNCATE 테이블명- Direct Path Insert > ALTER SESSION ENABLE PARALLEL DML; > ALTER TABLE 테이블명 NOLOGGING; > INSERT /*+ APPEND */ INTO 테이블명 SELECT * FROM 테이블명 ;

- 오라클을 쓰는 이유 ?

- 바인딩 처리가 무조건 좋다 ?

- Dynamic SQL .그냥 쓰면 하드파싱 처리

.바인딩 처리 가능

- 인덱스를 많이 만들면 좋다 ?

- 기본키 2 개 생성 ?

- 클러스터링 팩터가 나쁠 경우 ?

Page 34: 데이타베이스 기본튜닝

- SELECT (SELECT org_name FROM 코드테이블 WHERE org_code = U.org_code) FROM 사용자테이블 U > 스칼라뷰 특성 사용 - SELECT * FROM (SELECT * FROM 테이블명 ) > INLINE VIEW 특성 사용

- WHERE 항목명 IN(SELECT 조직코드 FROM 테이블명 WHERE 항목명 = PARENT. 항목명 ) > WHERE EXIST(SELECT 1 FROM 테이블명 WHERE 항목명 = PARENT. 항목명 )

- WHERE ROWNUM < 10 > 충분한 이해 없이 ROWNUM 사용 금지 , 결과 보장 되지 않거나 데이타가 축적될수록 느려짐

- SELECT * FROM 업체 WHERE SUBSTR( 업체명 , 1, 2) = “ 협회” > 인덱스 항목 가공 금지 ( 값은 가공 가능 )

- WITH A AS (SELECT * FROM 테이블명 ) SELECT * FROM A, A > 중복 접근 방지

- WHERE ORG_CODE = ‘1023’ AND > 복합키 선행 항목 누락 주의 > 복합키 순서 재조정 > 자주 사용하는 조건 항목 인덱스 누락 확인

SQL 튜닝

Page 35: 데이타베이스 기본튜닝

WHERE DECODE( 정정대상접수번호 , LPAD(’ ‘, 14), 금감원접수번호 , 정정대상접수번호 ) = : 접수번호WHERE 정정대상접수번호 IN(: 접수번호 , LPAD(’ ‘, 14)) AND 금감원접수번호 = DECODE( 정정대상접수번호 , LPAD(’ ‘, 14), : 접수번호 , 금감원접수번호 )WHERE 대상년월 = SUBSTR( 요청일자 , 1, 6) - 1WHERE 대상년월 = TO_CHAR(ADD_MONTHS(TO_DATE( 요청일자 , ‘YYYYMMDD’), -1), ‘YYYYMM’)

MAX(DECODE( 직책 , ‘ 대표’ , NULL, 급여 ))

MAX(DECODE( 직책 , ‘ 대표’ , TO_NUMBER(NULL), 급여 ))

SELECT * FROM EMP WHERE SAL > 1000 ORDER BY ENAME * 대부분 연봉 1000 만원 이상SELECT /*+ FIRST_ROWS */ * FROM EMP WHERE SAL > 1000 ORDER BY ENAME

SQL 튜닝 사례

Page 36: 데이타베이스 기본튜닝

- 선택도가 낮은 컬럼을 앞쪽에 두는 것이 유리한 경우 > X01 : 고객번호 + 거래일자 + 상품번호 > X02 : 상품번호 + 거래일자 + 고객번호- 선택도가 낮은 컬럼을 선택하는 것이 유리한 경우 > WHERE 거래일자 = : 거래일자 AND 상품번호 = : 상품번호 > WHERE 거래일자 = : 거래일자 AND 고객번호 = : 고객번호

- WHERE 항목명 IN(SELECT 조직코드 FROM 테이블명 WHERE 항목명 = PARENT. 항목명 ) > WHERE EXIST(SELECT 1 FROM 테이블명 WHERE 항목명 = PARENT. 항목명 )

- WHERE ROWNUM < 10 > 충분한 이해 없이 ROWNUM 사용 금지 , 결과 보장 되지 않거나 데이타가 축적될수록 느려짐

- SELECT * FROM 업체 WHERE SUBSTR( 업체명 , 1, 2) = “ 협회” > 인덱스 항목 가공 금지 ( 값은 가공 가능 )

- WITH A AS (SELECT * FROM 테이블명 ) SELECT * FROM A, A > 중복 접근 방지

- WHERE ORG_CODE = ‘1023’ AND > 복합키 선행 항목 누락 주의 > 복합키 순서 재조정 > 자주 사용하는 조건 항목 인덱스 누락 확인

- HASH JOIN 남용

인덱스 튜닝

Page 37: 데이타베이스 기본튜닝

BREAK TIME - IOT(Index Organized Table)

Page 38: 데이타베이스 기본튜닝

BREAK TIME - B-Tree 인덱스 아키텍처

Page 39: 데이타베이스 기본튜닝

산은산이요1. 파티션 활용 이해

2. 핵심 인력의 설정

3. 어플리케이션 캐쉬 사용

4. HINT 남용 주의

5. One SQL6. 부분 처리 ( 가독성 범위 )7. Array Processing 8. 분산 쿼리

9. 소트 연산 대체

기타 튜닝 고려 사항

Page 40: 데이타베이스 기본튜닝

고급 SQL 튜닝 - INLINE VIEW

Page 41: 데이타베이스 기본튜닝

고급 SQL 튜닝 - INLINE VIEW 튜닝 결과

Page 42: 데이타베이스 기본튜닝

고급 SQL 튜닝 - 배타적 관계 조인

Page 43: 데이타베이스 기본튜닝

고급 SQL 튜닝 - 배타적 관계 조인 - 해석 1

Page 44: 데이타베이스 기본튜닝

고급 SQL 튜닝 - 배타적 관계 조인 - 해석 2

Page 45: 데이타베이스 기본튜닝

고급 SQL 튜닝 - 배타적 관계 조인 - 튜닝

WITH 절 사용 ?

Page 46: 데이타베이스 기본튜닝

고급 SQL 튜닝 - 배타적 관계 조인 - 튜닝 결과

One SQL 사용

Page 47: 데이타베이스 기본튜닝

고급 SQL 튜닝 - 누적 매출

WINDOW 함수 이용

Page 48: 데이타베이스 기본튜닝

고급 SQL 튜닝 - 누적 매출 - 지원 환경 문제 발생

윈도우 함수 미지원 할 때 ?

Page 49: 데이타베이스 기본튜닝

고급 SQL 튜닝 - 누적 매출 - 지원 환경 문제 해결

윈도우 함수 미지원 할 때 ?

Page 50: 데이타베이스 기본튜닝

고급 SQL 튜닝 - 점이력 성능 문제 1

Page 51: 데이타베이스 기본튜닝

고급 SQL 튜닝 - 점이력 성능 문제 1 튜닝 결과

선분 이력 모델로 변경

Page 52: 데이타베이스 기본튜닝

고급 SQL 튜닝 - 점이력 성능 문제 2

Page 53: 데이타베이스 기본튜닝

고급 SQL 튜닝 - 점이력 성능 문제 2 - 튜닝 결과

Page 54: 데이타베이스 기본튜닝

고급 SQL 튜닝 - 비효율적 입력 SQL

Page 55: 데이타베이스 기본튜닝

고급 SQL 튜닝 - 비효율적 입력 SQL - 튜닝 결과

Page 56: 데이타베이스 기본튜닝

고급 SQL 튜닝 - 비효율적 입력 SQL

Page 57: 데이타베이스 기본튜닝

고급 SQL 튜닝 - FULL OUTER JOIN

Page 58: 데이타베이스 기본튜닝

고급 SQL 튜닝 - FULL OUTER JOIN, UNION ALL 로 튜닝

Page 59: 데이타베이스 기본튜닝

고급 SQL 튜닝 - 페이징 처리

Page 60: 데이타베이스 기본튜닝

고급 SQL 튜닝 - 페이징 처리 튜닝

Page 61: 데이타베이스 기본튜닝

BREAK TIME - WITH 구문을 이용한 반복 읽기 최소화

Page 62: 데이타베이스 기본튜닝

BREAK TIME - WITH 구문 해석

Page 63: 데이타베이스 기본튜닝

고급 SQL 튜닝 - 빈번하게 사용되는 SQL

Page 64: 데이타베이스 기본튜닝

고급 SQL 튜닝 - 빈번하게 사용되는 SQL 튜닝

Page 65: 데이타베이스 기본튜닝

고급 SQL 튜닝 - QUIZ

Page 66: 데이타베이스 기본튜닝

고급 SQL 튜닝 - QUIZ - HINT 1/2

Page 67: 데이타베이스 기본튜닝

고급 SQL 튜닝 - QUIZ - HINT 2/2

Page 68: 데이타베이스 기본튜닝

고급 SQL 튜닝 - DISTINCT

Page 69: 데이타베이스 기본튜닝

고급 SQL 튜닝 - DISTINCT 튜닝

Page 70: 데이타베이스 기본튜닝

고급 SQL 튜닝 - COUNT

Page 71: 데이타베이스 기본튜닝

고급 SQL 튜닝 - COUNT 튜닝

Page 72: 데이타베이스 기본튜닝

고급 SQL 튜닝 - MAX

Page 73: 데이타베이스 기본튜닝

고급 SQL 튜닝 - MAX 튜닝

Page 74: 데이타베이스 기본튜닝

고급 SQL 튜닝 - 소트 정렬

Page 75: 데이타베이스 기본튜닝

고급 SQL 튜닝 - QUIZ - HINT 2/2

Page 76: 데이타베이스 기본튜닝

고급 SQL 튜닝 - QUIZ - HINT 2/2

Page 77: 데이타베이스 기본튜닝

고급 SQL 튜닝 - MAX

Page 78: 데이타베이스 기본튜닝

고급 SQL 튜닝 - DML 튜닝

Page 79: 데이타베이스 기본튜닝

고급 SQL 튜닝 - DML 튜닝

Page 80: 데이타베이스 기본튜닝

고급 SQL 튜닝 - DML 튜닝

Page 81: 데이타베이스 기본튜닝

1. 데이타 포인트 소개

첨부

Page 82: 데이타베이스 기본튜닝

Q & A