1. 실행 계획 확인 하는 법
- 쿼리 앞에 explain을 붙여 줌
2. 실행 계획 각 항목이 의미하는 내용
구분 |
설명 |
ID |
Select 아이디로 Select를 구분하는 번호 |
Select_type |
Select에 대한 타입 |
Table |
참조하는 테이블 |
Type |
조인 혹은 조회 타입 |
Possible_Keys |
데이터를 조회할 때 DB에서 사용할 수 있는 인덱스 리스트 |
Key |
실제로 사용할 인덱스 |
Key_len |
실제로 사용할 인덱스의 길이 |
Ref |
Key 안의 인덱스와 비교하는 칼럼(상수) |
Rows |
쿼리 실행 시 조사하는 행 수 |
Extra |
추가 정보 |
3. Select_type
구분 |
설명 |
SIMPLE |
UNION이나 서브쿼리가 없는 단순 SELECT |
PRIMARY |
서브쿼리가 있을 때 가장 바깥쪽에 있는 SELECT |
DERIVED |
FROM절 안의 서브쿼리 |
DEPENDENT SUBQUERY |
외부 쿼리와 상호 연관된 서브쿼리 |
4. Type
구분 |
설명 |
system |
테이블에 단 한개의 데이터만 있는 경우 |
const |
SELECT에서 Primary Key 혹은 Unque Key를 상수로 조회하는 경우(최소 0건, 최대 1건) |
eq_ref |
조인을 할 때 Primary Key 혹은 Unique Key로 매칭 하는 경우 |
ref |
조인을 할 때 Primary Key 혹은 Unique Key가 아닌 Key로 매칭하는 경우 |
ref_or_null |
ref와 같지만 NULL이 추가되어 검색되는 경우 |
index_merge |
두 개의 인덱스가 병합되어 검색이 이루어지는 경우 |
unique_subquery |
IN절 안의 서브쿼리에서 Primary Key가 오는 경우 |
index_subquery |
IN절 안의 서브쿼리에서 Primary Key가 아닌 Key가 오는 경우 |
range |
특정 범위 내에서 인덱스를 사용하여 원하는 데이터를 추출하는 경우 |
index |
인덱스 풀스캔 |
all |
테이블 풀스캔 |
5. Extra
구분 |
설명 |
Using Index |
커버링 인덱스. 인덱스 자료구조를 이용해서 데이터를 추출 |
Using Where |
Where 조건으로 데이터를 추출. Type이 All 혹은 Index 타입과 함께 표현되면 성능이 좋지 않다는 의미임 |
Using Filesort |
데이터 정렬이 필요한 경우. 결과 데이터가 많은 경우 성능에 직접적인 영향을 미침 |
Using Temporary |
쿼리 처리 시 내부적으로 Temporary Table이 사용되는 경우를 의미 |