티스토리 뷰
1. Select_type 칼럼의 주의 대상
1. DERIVED
DERIVED 는 FROM 절에 사용된 서브 쿼리로부터 발생한 임시 테이블을 의미
임시 테이블은 메모리에 저장될 수도 있고 디스크에 저장될 수 도 있다.
일반적으로 메모리에 저장하는 경우에는 크게 성능에 영향을 미치지 않지만, 데이터의 크기가 커서 임시 테이블을 디스크에 저장하면 성능이 떨어진다.
2. UNCACHEABLE SUBQUERY
쿼리의 FROM 절 이외의 부분에서 사용하는 서브쿼리는 가능하면 MySQL 옵티마이저가 최대한 캐시되어 재사용 될 수 있게 유도한다. 하지만 사용자 변수나 일부 함수가 사용된 경우에는 이러한 캐시 기능을 사용할 수 없게 만든다.
이런 실행 계획이 사용된다면 혹시 사용자 변수를 제거하거나 다른 함수로 대체해서 사용 가능할지 검토해보는 것이 좋다.
3. DEPENDENT SUBQUERY
쿼리의 FROM 절 이외의 사용하는 서브 쿼리가 자체적으로 실행되지 못하고, 외부 쿼리에서 값을 전달받아 실행되는 경우 DEPENDENT SUBQUERY 가 표시된다. 이는 서브 쿼리가 먼저 실행되지 못하고, 서브 쿼리가 외부 쿼리의 결과 값에 의존적이기 때문에 전체 쿼리의 성능을 느리게 만든다.
2. Type 칼럼의 주의 대상
ALL INDEX
INDEX 인덱스 풀 스캔을 의미하며, ALL 은 풀 테이블 스캔을 의미
3. KEY 칼럼의 주의 대상
쿼리가 인덱스를 사용하지 못할 때 실행 계획의 Key 칼럼에 아무 값도 표시되지 않는다.
쿼리가 인덱스를 사용할 수 있게 인덱스를 추가하거나 WHERE 조건을 변경하는것이 좋다.
4. Rows 칼럼의 주의 대상
쿼리가 실제 가져오는 레코드 수보다 훨씬 더 큰 값이 Rows 칼럼에 표시되는 경우에는 쿼리가 인덱스를 정상적으로
사용하고 있는지, 그리고 그 인덱스가 충분히 작업 범위를 좁혀 줄 수 있는 칼럼으로 구성됐는지 검토
5. Extra 칼럼의 주의 대상
쿼리가 요건을 제대로 반영하고 있는지 확인해야 하는 경우
- Full scan on NULL key
- Impossible HAVING
- Impossible WHERE
- Impossible WHERE noticed after reading const tables
- No matching min/max row
- No matching row in const table
- Unique row not found
쿼리의 실행 계획이 좋지 않는 경우
- Range checked for each record
- Using filesort
- Using join buffer
- Using temporary
- Using where
쿼리의 실행 계획이 좋은 경우
- Distinct
- Using index
- Using index for group-by
Reference
Real Mysql
'Data Enginnering > Mysql' 카테고리의 다른 글
MySQL - 프로세스 리스트 (0) | 2020.11.20 |
---|---|
MySQL 레플리케이션 상태 확인 (0) | 2020.09.27 |
MySQL 인덱스 (0) | 2020.05.24 |
MySQL 아키텍쳐 (0) | 2020.04.15 |
Mysql 마스터/슬레이브 구축 (0) | 2019.10.21 |
- Total
- Today
- Yesterday
- docker
- 로그
- pytest
- spark
- 엘라스틱서치
- flask
- BigData
- SQL
- ios
- linux
- network
- nginx
- SWIFT
- 리눅스
- 도커
- logstash
- WEB
- ElasticSearch
- python
- MYSQL
- 네트워크
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |