SlideShare une entreprise Scribd logo
1  sur  26
Télécharger pour lire hors ligne
데이터베이스 개론
기초튜닝
NHN NEXT 정호영
나눔고딕 및 나눔고딕코딩 글꼴을 설치해 주세요.
튜닝이란?
쿼리의 성능을 높이기 위한 방법
다양한 방법이 존재
암달의 저주 때문에 한계가 존재함
암달의 저주(법칙)
시스템에서
차지하는 비율이 P인 구성요소의
성능을 S만큼 개선했을 때의 전체 성능 비율을 나타내는 공식
병렬 프로그래밍 분야에서 저주라고 부르는 이유
19.8배의 한계에 부딪힌다!
 꼭 그런 건 아닙니다.
암달의 법칙이 주는 교훈
성능을 높이려면 시스템에서 큰 비중을 차지하는 쪽을 높여라!
Ex)
5% 를 차지하는 A를 500% 성능개선
50%를 차지하는 B를 120% 성능개선?
암달의 법칙이 주는 교훈
성능을 높이려면 시스템에서 큰 비중을 차지하는 쪽을 높여라!
Ex)
1 / ((1-0.05) + 0.05/5) = 1.04 -> 4%개선
1/ ((1-0.7) + 0.7 / 1.2 ) = 1.13 -> 13%개선
암달의 법칙이 주는 교훈
인생에서도
무엇인가를 개선하려면
조금 개선하더라도 비율이 큰 쪽을 개선하라.
데이터베이스 쿼리의 성능을 높이는 방법
1. 더 비싼 하드웨어로 교체
2. 시스템 튜닝
3. 데이터 모델링을 통한 성능 개선
4. 쿼리 튜닝
하드웨어 + OS + 시스템 분야의 해박한 지식과 경험
현업에서 튜닝이 절박한 경우는
1. 성능이 좋은 걸 더 좋게 한다.
2. 알 수 없는 이유로 성능이 나빠졌을 때, 다시 원상복구
어디일까요?
원인을 알아야 합니다.
1. 전문가를 초청한다 : 가장 좋지만 돈이 듭니다.
2. 정적분석 : 안 돌려 보고 원인을 예측하는 방법 DB는 쿼리
플랜을 보는 좋은 툴이 있습니다.
3. 프로파일링 : 실제 실행 후, 실행결과를 분석하는 방법
MySQL에서 쿼리 플랜을 보려면
EXPLAIN명령을 사용합니다.
SELECT 문장에만 사용할 수 있습니다.
‘G’ 를 사용하면 더 보기 좋게 나옵니다.
참고링크:
http://dev.mysql.com/doc/refman/5.5/en/explain-
output.html
mysql> EXPLAIN SELECT … G
결과는 하나 이상의 레코드 입니다.
한 행이 하나의 동작이고
대체로 위에서 아래로 실행됩니다.
ID는 SELECT당 하나씩 부여됩니다.
mysql> EXPLAIN
SELECT * FROM USER;
mysql> EXPLAIN
SELECT * FROM USER JOIN TRADE ON USER.ID = TRADE.SELLER;
mysql> EXPLAIN
SELECT * FROM
(SELECT COUNT(*) FROM USER
UNION
SELECT COUNT(*) FROM TRADE ) AS T;
SELECT_TYPE
SIMPLE, PRIMARY : 가장 바깥 쿼리
SUBQUERY : 일반 서브쿼리
mysql> EXPLAIN
SELECT * FROM USER
WHERE ID IN
(SELECT SELLER FROM TRADE
GROUP BY SELLER
HAVING COUNT(*) > 3);
SELECT_TYPE
DERIVED : FROM절의 서브 쿼리
*가능하면 없애자
m> EXPLAIN
SELECT * FROM
( SELECT * FROM user u) as u2;
SELECT_TYPE
DEPENDANT SUBQUERY : 바깥 테이블과 연관된 서브쿼리
*가능하면 없애자
m> EXPLAIN
SELECT * FROM user u
WHERE money > ANY (
SELECT price FROM trade t WHERE u.id = t.seller );
TABLE
테이블의 이름 또는 종류
<XX2>와 같은 테이블의 숫자는 쿼리 플랜의 ID를 가리킴
TYPE
실제 데이터를 읽는 방법
SYSTEM, CONST, REF, RANGE, INDEX, ALL 등이 있음
SYSTEM이 가장 빠르고 ALL 이 가장 느림
INDEX는 INDEX FULL SCAN, 빠르지 않음
mysql> EXPLAIN SELECT * FROM USER
WHERE LAST_VISIT > '2014-06-10';
mysql> CREATE INDEX TEST_IDX ON USER(LAST_VISIT);
mysql> EXPLAIN SELECT * FROM
USER WHERE LAST_VISIT > '2014-06-1';
POSSIBLE KEYS
쓸모없는 컬럼, 가볍게 무시하자!
KEY
실제 데이터를 읽기 위해 사용되는 인덱스의 이름
필요에 의해 생성한 인덱스가 잘 사용되는지 확인!
mysql> DROP INDEX TEST_IDX ON USER;
mysql> CREATE INDEX POPI ON USER(LAST_VISIT,MONEY);
mysql> EXPLAIN SELECT * FROM USER WHERE LAST_VISIT > '2014-06-01';
mysqL> EXPLAIN SELECT * FROM USER
WHERE LAST_VISIT = '2014-06-01' AND MONEY > 1000;
mysql> EXPLAIN SELECT * FROM USER WHERE MONEY < 5000;
KEY_LEN
인덱스 중 사용할 수 있는 크기를 나타냅니다.
복합 인덱스에서 매우 중요합니다.
ROWS
예상 레코드 개수, 이를 위해 통계정보를 저장합니다.
EXTRA
이름과는 달리 매우 중요한 정보들이 저장되지만, 패스.
요약
1. 쿼리가 원하는 성능이 안 나올 경우 튜닝 실시
2. explain 명령으로 원인분석
3. dependant subquery, derived 와 같은 타입이 안 나오게
4. 되도록 all 이 나오지 않도록
THANK YOU!!!

Contenu connexe

Tendances

효율적인Sql작성방법 4주차
효율적인Sql작성방법 4주차효율적인Sql작성방법 4주차
효율적인Sql작성방법 4주차
희동 강
 

Tendances (20)

(오라클힌트/SQL튜닝 강좌)쿼리튜닝을 위한 오라클의 10053 이벤트
(오라클힌트/SQL튜닝 강좌)쿼리튜닝을 위한 오라클의 10053 이벤트(오라클힌트/SQL튜닝 강좌)쿼리튜닝을 위한 오라클의 10053 이벤트
(오라클힌트/SQL튜닝 강좌)쿼리튜닝을 위한 오라클의 10053 이벤트
 
효율적인Sql작성방법 4주차
효율적인Sql작성방법 4주차효율적인Sql작성방법 4주차
효율적인Sql작성방법 4주차
 
MySQL JOIN
MySQL JOINMySQL JOIN
MySQL JOIN
 
(오라클힌트,SQL튜닝강좌#25)오라클WITH구문,서브쿼리 팩토링
(오라클힌트,SQL튜닝강좌#25)오라클WITH구문,서브쿼리 팩토링(오라클힌트,SQL튜닝강좌#25)오라클WITH구문,서브쿼리 팩토링
(오라클힌트,SQL튜닝강좌#25)오라클WITH구문,서브쿼리 팩토링
 
복수행 서브쿼리
복수행 서브쿼리복수행 서브쿼리
복수행 서브쿼리
 
MySQL delete.update
MySQL delete.updateMySQL delete.update
MySQL delete.update
 
#1.SQL초보에서 Schema Objects까지(SQL학원/오라클학원/IT실무교육학원/재직자/실업자교육학원추천)
#1.SQL초보에서 Schema Objects까지(SQL학원/오라클학원/IT실무교육학원/재직자/실업자교육학원추천)#1.SQL초보에서 Schema Objects까지(SQL학원/오라클학원/IT실무교육학원/재직자/실업자교육학원추천)
#1.SQL초보에서 Schema Objects까지(SQL학원/오라클학원/IT실무교육학원/재직자/실업자교육학원추천)
 
단일행 서브쿼리
단일행 서브쿼리단일행 서브쿼리
단일행 서브쿼리
 
(오라클SQL기초강좌)상관 서브쿼리(Correlated Sub Query)
(오라클SQL기초강좌)상관 서브쿼리(Correlated Sub Query)(오라클SQL기초강좌)상관 서브쿼리(Correlated Sub Query)
(오라클SQL기초강좌)상관 서브쿼리(Correlated Sub Query)
 
Any(some),all,exists(2)
Any(some),all,exists(2)Any(some),all,exists(2)
Any(some),all,exists(2)
 
Laravel 로 배우는 서버사이드 #4
Laravel 로 배우는 서버사이드 #4Laravel 로 배우는 서버사이드 #4
Laravel 로 배우는 서버사이드 #4
 
Rownum
RownumRownum
Rownum
 
#12.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_구로IT학원, 국비지원학원,재직자/실업자교육학원,스...
#12.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_구로IT학원, 국비지원학원,재직자/실업자교육학원,스...#12.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_구로IT학원, 국비지원학원,재직자/실업자교육학원,스...
#12.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_구로IT학원, 국비지원학원,재직자/실업자교육학원,스...
 
[Pgday.Seoul 2021] 1. 예제로 살펴보는 포스트그레스큐엘의 독특한 SQL
[Pgday.Seoul 2021] 1. 예제로 살펴보는 포스트그레스큐엘의 독특한 SQL[Pgday.Seoul 2021] 1. 예제로 살펴보는 포스트그레스큐엘의 독특한 SQL
[Pgday.Seoul 2021] 1. 예제로 살펴보는 포스트그레스큐엘의 독특한 SQL
 
PostgreSQL로 배우는 SQL 기초
PostgreSQL로 배우는 SQL 기초PostgreSQL로 배우는 SQL 기초
PostgreSQL로 배우는 SQL 기초
 
1.9 튜닝의도구 10053 event
1.9 튜닝의도구 10053 event1.9 튜닝의도구 10053 event
1.9 튜닝의도구 10053 event
 
JPA Study - 1주차(SLIPP)
JPA Study - 1주차(SLIPP)JPA Study - 1주차(SLIPP)
JPA Study - 1주차(SLIPP)
 
[ES6] 4. Spread, Rest parameter
[ES6] 4. Spread, Rest parameter[ES6] 4. Spread, Rest parameter
[ES6] 4. Spread, Rest parameter
 
[Pgday.Seoul 2020] SQL Tuning
[Pgday.Seoul 2020] SQL Tuning[Pgday.Seoul 2020] SQL Tuning
[Pgday.Seoul 2020] SQL Tuning
 
BlOOM FILTER의 이해와 활용방법_Wh oracle
BlOOM FILTER의 이해와 활용방법_Wh oracleBlOOM FILTER의 이해와 활용방법_Wh oracle
BlOOM FILTER의 이해와 활용방법_Wh oracle
 

Similaire à 암달의 법칙과 쿼리튜닝 기초

Clean code
Clean codeClean code
Clean code
bbongcsu
 
The roadtocodecraft
The roadtocodecraftThe roadtocodecraft
The roadtocodecraft
bbongcsu
 

Similaire à 암달의 법칙과 쿼리튜닝 기초 (20)

Fundamentals of Oracle SQL
Fundamentals of Oracle SQLFundamentals of Oracle SQL
Fundamentals of Oracle SQL
 
Clean code
Clean codeClean code
Clean code
 
Hive begins
Hive beginsHive begins
Hive begins
 
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)
 
Database 튜닝 교육 110124
Database 튜닝 교육 110124Database 튜닝 교육 110124
Database 튜닝 교육 110124
 
Presto User & Admin Guide
Presto User & Admin GuidePresto User & Admin Guide
Presto User & Admin Guide
 
Oracle Optimizer presentation
Oracle Optimizer presentationOracle Optimizer presentation
Oracle Optimizer presentation
 
The roadtocodecraft
The roadtocodecraftThe roadtocodecraft
The roadtocodecraft
 
Ksug2015 jpa4 객체지향쿼리
Ksug2015 jpa4 객체지향쿼리Ksug2015 jpa4 객체지향쿼리
Ksug2015 jpa4 객체지향쿼리
 
[2015-06-26] Oracle 성능 최적화 및 품질 고도화 3
[2015-06-26] Oracle 성능 최적화 및 품질 고도화 3[2015-06-26] Oracle 성능 최적화 및 품질 고도화 3
[2015-06-26] Oracle 성능 최적화 및 품질 고도화 3
 
[2015-06-19] Oracle 성능 최적화 및 품질 고도화 2
[2015-06-19] Oracle 성능 최적화 및 품질 고도화 2[2015-06-19] Oracle 성능 최적화 및 품질 고도화 2
[2015-06-19] Oracle 성능 최적화 및 품질 고도화 2
 
1.3 dbms stats 패키지사용하기
1.3 dbms stats 패키지사용하기1.3 dbms stats 패키지사용하기
1.3 dbms stats 패키지사용하기
 
ecdevday8 웹개발자의 약한고리 SQL 뛰어넘기
ecdevday8 웹개발자의 약한고리 SQL 뛰어넘기ecdevday8 웹개발자의 약한고리 SQL 뛰어넘기
ecdevday8 웹개발자의 약한고리 SQL 뛰어넘기
 
제 9회 엑셈 수요 세미나 자료 연구컨텐츠팀
제 9회 엑셈 수요 세미나 자료 연구컨텐츠팀제 9회 엑셈 수요 세미나 자료 연구컨텐츠팀
제 9회 엑셈 수요 세미나 자료 연구컨텐츠팀
 
From MSSQL to MySQL
From MSSQL to MySQLFrom MSSQL to MySQL
From MSSQL to MySQL
 
1.7 튜닝의도구 sql autorace
1.7 튜닝의도구 sql autorace1.7 튜닝의도구 sql autorace
1.7 튜닝의도구 sql autorace
 
Java8 람다
Java8 람다Java8 람다
Java8 람다
 
[오라클교육/닷넷교육/자바교육/SQL기초/스프링학원/국비지원학원/자마린교육]#16.SQL초보에서 Schema Objects까지
[오라클교육/닷넷교육/자바교육/SQL기초/스프링학원/국비지원학원/자마린교육]#16.SQL초보에서 Schema Objects까지[오라클교육/닷넷교육/자바교육/SQL기초/스프링학원/국비지원학원/자마린교육]#16.SQL초보에서 Schema Objects까지
[오라클교육/닷넷교육/자바교육/SQL기초/스프링학원/국비지원학원/자마린교육]#16.SQL초보에서 Schema Objects까지
 
배치 프로그램에서 튜닝대상 SQL 추출하기_Wh oracle
배치 프로그램에서 튜닝대상 SQL 추출하기_Wh oracle배치 프로그램에서 튜닝대상 SQL 추출하기_Wh oracle
배치 프로그램에서 튜닝대상 SQL 추출하기_Wh oracle
 
TABLE ACCESS 패턴을 이용한 SQL 튜닝_Wh oracle
TABLE ACCESS 패턴을 이용한 SQL 튜닝_Wh oracleTABLE ACCESS 패턴을 이용한 SQL 튜닝_Wh oracle
TABLE ACCESS 패턴을 이용한 SQL 튜닝_Wh oracle
 

Plus de Hoyoung Jung

Plus de Hoyoung Jung (20)

철권 1단에서 벗어나기
철권 1단에서 벗어나기철권 1단에서 벗어나기
철권 1단에서 벗어나기
 
코딩 공부 시작하기
코딩 공부 시작하기코딩 공부 시작하기
코딩 공부 시작하기
 
내 질문에는 왜 답변이 달리지 않을까
내 질문에는 왜 답변이 달리지 않을까내 질문에는 왜 답변이 달리지 않을까
내 질문에는 왜 답변이 달리지 않을까
 
entry를 이용한 코딩 교육1
entry를 이용한 코딩 교육1entry를 이용한 코딩 교육1
entry를 이용한 코딩 교육1
 
Github Markdown
Github MarkdownGithub Markdown
Github Markdown
 
stored procedure2 + jdbc
stored procedure2 + jdbcstored procedure2 + jdbc
stored procedure2 + jdbc
 
mysql stored procedure
mysql stored proceduremysql stored procedure
mysql stored procedure
 
mysql 서브쿼리
mysql 서브쿼리mysql 서브쿼리
mysql 서브쿼리
 
GROUP BY, CASE WHEN
GROUP BY, CASE WHENGROUP BY, CASE WHEN
GROUP BY, CASE WHEN
 
트랜잭션
트랜잭션 트랜잭션
트랜잭션
 
데이터베이스 정규화
데이터베이스 정규화데이터베이스 정규화
데이터베이스 정규화
 
tomcat jdbc mysql 프로그래밍
tomcat jdbc mysql 프로그래밍tomcat jdbc mysql 프로그래밍
tomcat jdbc mysql 프로그래밍
 
데이터베이스 모델링
데이터베이스 모델링데이터베이스 모델링
데이터베이스 모델링
 
MySQL Select (1)
MySQL Select (1)MySQL Select (1)
MySQL Select (1)
 
4. 함수포인터
4. 함수포인터4. 함수포인터
4. 함수포인터
 
2. MySQL DataTye Basic
2. MySQL DataTye Basic2. MySQL DataTye Basic
2. MySQL DataTye Basic
 
MySQL Create Table
MySQL Create TableMySQL Create Table
MySQL Create Table
 
Mymysql basic sql
Mymysql basic sqlMymysql basic sql
Mymysql basic sql
 
데이터베이스 베이직 소개
데이터베이스 베이직 소개데이터베이스 베이직 소개
데이터베이스 베이직 소개
 
Crontab 간단 사용법
Crontab 간단 사용법Crontab 간단 사용법
Crontab 간단 사용법
 

Dernier

Dernier (8)

공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화
 
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
 
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
 
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
 
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
 
데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법
 
JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!
 
JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례
 

암달의 법칙과 쿼리튜닝 기초

  • 1. 데이터베이스 개론 기초튜닝 NHN NEXT 정호영 나눔고딕 및 나눔고딕코딩 글꼴을 설치해 주세요.
  • 2. 튜닝이란? 쿼리의 성능을 높이기 위한 방법 다양한 방법이 존재 암달의 저주 때문에 한계가 존재함
  • 3. 암달의 저주(법칙) 시스템에서 차지하는 비율이 P인 구성요소의 성능을 S만큼 개선했을 때의 전체 성능 비율을 나타내는 공식
  • 4. 병렬 프로그래밍 분야에서 저주라고 부르는 이유 19.8배의 한계에 부딪힌다!  꼭 그런 건 아닙니다.
  • 5. 암달의 법칙이 주는 교훈 성능을 높이려면 시스템에서 큰 비중을 차지하는 쪽을 높여라! Ex) 5% 를 차지하는 A를 500% 성능개선 50%를 차지하는 B를 120% 성능개선?
  • 6. 암달의 법칙이 주는 교훈 성능을 높이려면 시스템에서 큰 비중을 차지하는 쪽을 높여라! Ex) 1 / ((1-0.05) + 0.05/5) = 1.04 -> 4%개선 1/ ((1-0.7) + 0.7 / 1.2 ) = 1.13 -> 13%개선
  • 7. 암달의 법칙이 주는 교훈 인생에서도 무엇인가를 개선하려면 조금 개선하더라도 비율이 큰 쪽을 개선하라.
  • 8. 데이터베이스 쿼리의 성능을 높이는 방법 1. 더 비싼 하드웨어로 교체 2. 시스템 튜닝 3. 데이터 모델링을 통한 성능 개선 4. 쿼리 튜닝 하드웨어 + OS + 시스템 분야의 해박한 지식과 경험
  • 9. 현업에서 튜닝이 절박한 경우는 1. 성능이 좋은 걸 더 좋게 한다. 2. 알 수 없는 이유로 성능이 나빠졌을 때, 다시 원상복구 어디일까요?
  • 10. 원인을 알아야 합니다. 1. 전문가를 초청한다 : 가장 좋지만 돈이 듭니다. 2. 정적분석 : 안 돌려 보고 원인을 예측하는 방법 DB는 쿼리 플랜을 보는 좋은 툴이 있습니다. 3. 프로파일링 : 실제 실행 후, 실행결과를 분석하는 방법
  • 11. MySQL에서 쿼리 플랜을 보려면 EXPLAIN명령을 사용합니다. SELECT 문장에만 사용할 수 있습니다. ‘G’ 를 사용하면 더 보기 좋게 나옵니다. 참고링크: http://dev.mysql.com/doc/refman/5.5/en/explain- output.html mysql> EXPLAIN SELECT … G
  • 12. 결과는 하나 이상의 레코드 입니다. 한 행이 하나의 동작이고 대체로 위에서 아래로 실행됩니다.
  • 13. ID는 SELECT당 하나씩 부여됩니다. mysql> EXPLAIN SELECT * FROM USER; mysql> EXPLAIN SELECT * FROM USER JOIN TRADE ON USER.ID = TRADE.SELLER;
  • 14. mysql> EXPLAIN SELECT * FROM (SELECT COUNT(*) FROM USER UNION SELECT COUNT(*) FROM TRADE ) AS T;
  • 15. SELECT_TYPE SIMPLE, PRIMARY : 가장 바깥 쿼리 SUBQUERY : 일반 서브쿼리 mysql> EXPLAIN SELECT * FROM USER WHERE ID IN (SELECT SELLER FROM TRADE GROUP BY SELLER HAVING COUNT(*) > 3);
  • 16. SELECT_TYPE DERIVED : FROM절의 서브 쿼리 *가능하면 없애자 m> EXPLAIN SELECT * FROM ( SELECT * FROM user u) as u2;
  • 17. SELECT_TYPE DEPENDANT SUBQUERY : 바깥 테이블과 연관된 서브쿼리 *가능하면 없애자 m> EXPLAIN SELECT * FROM user u WHERE money > ANY ( SELECT price FROM trade t WHERE u.id = t.seller );
  • 18. TABLE 테이블의 이름 또는 종류 <XX2>와 같은 테이블의 숫자는 쿼리 플랜의 ID를 가리킴
  • 19. TYPE 실제 데이터를 읽는 방법 SYSTEM, CONST, REF, RANGE, INDEX, ALL 등이 있음 SYSTEM이 가장 빠르고 ALL 이 가장 느림 INDEX는 INDEX FULL SCAN, 빠르지 않음
  • 20. mysql> EXPLAIN SELECT * FROM USER WHERE LAST_VISIT > '2014-06-10'; mysql> CREATE INDEX TEST_IDX ON USER(LAST_VISIT); mysql> EXPLAIN SELECT * FROM USER WHERE LAST_VISIT > '2014-06-1';
  • 21. POSSIBLE KEYS 쓸모없는 컬럼, 가볍게 무시하자! KEY 실제 데이터를 읽기 위해 사용되는 인덱스의 이름 필요에 의해 생성한 인덱스가 잘 사용되는지 확인!
  • 22. mysql> DROP INDEX TEST_IDX ON USER; mysql> CREATE INDEX POPI ON USER(LAST_VISIT,MONEY); mysql> EXPLAIN SELECT * FROM USER WHERE LAST_VISIT > '2014-06-01'; mysqL> EXPLAIN SELECT * FROM USER WHERE LAST_VISIT = '2014-06-01' AND MONEY > 1000; mysql> EXPLAIN SELECT * FROM USER WHERE MONEY < 5000;
  • 23. KEY_LEN 인덱스 중 사용할 수 있는 크기를 나타냅니다. 복합 인덱스에서 매우 중요합니다. ROWS 예상 레코드 개수, 이를 위해 통계정보를 저장합니다.
  • 24. EXTRA 이름과는 달리 매우 중요한 정보들이 저장되지만, 패스.
  • 25. 요약 1. 쿼리가 원하는 성능이 안 나올 경우 튜닝 실시 2. explain 명령으로 원인분석 3. dependant subquery, derived 와 같은 타입이 안 나오게 4. 되도록 all 이 나오지 않도록