티스토리 뷰

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
링크
«   2025/01   »
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
글 보관함