일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 나르왈프레오
- Neural Network
- 신경망
- 가상화
- BAM
- Bidirectional Associative Memory
- SSM
- hopfield network
- 고려대학교
- 멤버십
- Google App Engine
- 인공지능
- 삼성소프트웨어멤버십
- 갤럭시탭S8울트라
- NarwalFreo
- 패턴 인식
- 구글 앱 엔진
- Python
- 증강현실
- 신경회로망
- Friendship
- 물걸레로봇청소기추천
- 하이퍼바이저
- 파이썬
- 동아리
- 빅데이터
- 삼성
- 삼성전자 소프트웨어멤버십 SSM
- 물걸레자동세척로봇청소기
- 패턴인식
- Today
- Total
정보공간_1
[4기 대구 박병권] 데이터베이스 EXPLAIN을 활용한 슬로우 쿼리 검색 본문
[4기 대구 박병권] 데이터베이스 EXPLAIN을 활용한 슬로우 쿼리 검색
알 수 없는 사용자 2013. 12. 1. 04:51안녕하십니까?
대구멤버십 21-2기 박병권입니다.
오늘은 데이터베이스 EXPLAIN을 이용하여 Full-Scan하는 쿼리를 찾는 방법에 대해 이야기 하려고 합니다.
일반적으로 쿼리가 빠르게 동작하지 않는 경우는 대부분 너무 많은 데이터를 이용하기 때문입니다. 이런 슬로우쿼리는 필요이상의 데이터를 가져오는지 확인해야 하며, 필요이상으로 많은 행을 분석하는지 확인을 해보아야 합니다.
또한 해당 쿼리가 Full-Scan을 하는지 인덱스를 이용하여 참조를 하여 검색을 하는지 혹은 원하는 키가 아닌 다른 키로 검색을 하는 지 확인을 해보아야 할 때가 있습니다. 이럴 경우 EXPLAIN을 활용한다면 조금 더 빠른 쿼리를 작성하는데 도움이 될 것입니다.
EXPLAIN은 SQL을 수행하기 전 데이터를 어떻게 가져올 건지에 대한 실행계획을 의미합니다.
간단한 예로 인덱스를 이용하여 빠른 탐색과 인덱스를 제거한 후 탐색 속도를 예로 들겠습니다.
EXPLAIN 구문을 사용하면 아래 같이 여러 속성들을 볼 수 있습니다.
먼저 아래 구문을 실행합니다.
간단한 쿼리로 인덱스을 사용하면서 사용자 아이디를 이용하여 정보를 얻는 쿼리입니다.
-id : 번호
-select_type: 서브쿼리 혹은 단순한 쿼리
- table : 참조된 테이블
- type : 검색 방법
- possible_key : 검색가능한 키
- key : 실제 사용한 키
- key_len : 키 길이
- row : 참조된 행의 수
여러 속성 중 가장 중요하게 봐야 하는 부분은 type부분입니다. type부분은 아래와 같습니다.
- ALL : 전체 검색
- INDEX : 인덱스만 정의 되어 있는 곳을 검색
- RANGE : 범위를 제한하여 검색하기 때문에 ALL보다 빠른 검색
- REF : 특정 값이 매칭되어 있는 행을 탐색합니다. ex) 외래키를 이용한 검색
- CONST : 검색하는 값이 상수로 대체 시켜서 한 번의 읽음으로 값을 검색할 수 있음
위 쿼리는 인덱스가 적용된 상태이며 검색에 필요한 행은 1개입니다. type 역시 const이므로 아주 빠른 검색 시간을 기대할 수 있습니다.
동일한 데이터베이스에서 인덱스를 제거하고 쿼리를 실행합니다.
인덱스를 제거하였으므로 전체 탐색을 할 수 밖에 없기 때문에 type에 ALL이 있습니다.
또한 검색수는 전체 행의 수인 25151개를 참조해야 검색이 가능합니다.
ALL이 확인되는 쿼리는 조금 더 빠른 쿼리를 위해서 인덱스를 활용해서 빠른 쿼리로 바꿔야 합니다.
- 참고문헌
1. MySQL 성능 최적화 / 위키북스 / 배론 슈와츠 지음
'IT 놀이터 > Elite Member Tech & Talk' 카테고리의 다른 글
[4기 강남 안태형] Java Class Loader #2 (0) | 2013.12.01 |
---|---|
[4기 강남 안태형] Java Class Loader #1 (0) | 2013.12.01 |
[4기 부산 김솔] Codeigniter 5 (0) | 2013.12.01 |
[4기 부산 김솔] Codeigniter 4 (0) | 2013.12.01 |
[4기 대구 유승범] 모터의 원리 및 이해#2(리니어, 서보, AI) (1) | 2013.11.30 |