MySQL 실행 계획 을 배 워 드릴 게 요.

1.실행 계획 안내
실행 계획 은 MySQL 조회 최적화 회 의 를 거 친 후에 구체 적 인 실행 방식 을 말한다.MySQL 이 제 공 했 습 니 다. 실행 계획 에 대한 정 보 를 얻 기 위해 EXPLAIN 문 구 를 사용 합 니 다.주의해 야 할 것 은 EXPLAIN 문 구 는 관련 문 구 를 실제로 실행 하지 않 고 최적화 기 를 통 해 문 구 를 분석 하여 가장 좋 은 조회 방안 을 찾 아 해당 하 는 정 보 를 표시 하 는 것 이다.
실행 계획 은 보통 SQL 성능 분석,최적화 등 장면 에 사용 된다.explain 의 결 과 를 통 해 데이터 시트 의 조회 순서,데이터 조회 작업 의 조작 유형,어떤 색인 이 명중 할 수 있 는 지,어떤 색인 이 실제 적 으로 명중 할 수 있 는 지,각 데이터 시트 에 몇 줄 의 기록 이 조회 되 는 지 등 정 보 를 알 수 있다.
explain 실행 계획 은 SELECT,DELETE,INSERT,REPLACE 및 UPDATE 문 구 를 지원 합 니 다.우 리 는 일반적으로 select 조회 문 구 를 분석 하 는 데 많이 사용 된다.
2.실행 계획 실전
다음 검색 어의 실행 계획 을 간단히 살 펴 보 겠 습 니 다.

mysql> explain SELECT * FROM dept_emp WHERE emp_no IN (SELECT emp_no FROM dept_emp GROUP BY emp_no HAVING COUNT(emp_no)>1);
+----+-------------+----------+------------+-------+-----------------+---------+---------+------+--------+----------+-------------+
| id | select_type | table    | partitions | type  | possible_keys   | key     | key_len | ref  | rows   | filtered | Extra       |
+----+-------------+----------+------------+-------+-----------------+---------+---------+------+--------+----------+-------------+
|  1 | PRIMARY     | dept_emp | NULL       | ALL   | NULL            | NULL    | NULL    | NULL | 331143 |   100.00 | Using where |
|  2 | SUBQUERY    | dept_emp | NULL       | index | PRIMARY,dept_no | PRIMARY | 16      | NULL | 331143 |   100.00 | Using index |
+----+-------------+----------+------------+-------+-----------------+---------+---------+------+--------+----------+-------------+
이 를 통 해 알 수 있 듯 이 계획 을 집행 한 결과 모두 12 열 이 있 고 각 열 대표 의 의 미 는 다음 과 같다.
열명
속뜻
id
SELECT 조회 의 시퀀스 식별 자
select_type
SELECT 키워드 에 대응 하 는 검색 유형
table
시계 이름
partitions
일치 하 는 파 티 션,파 티 션 되 지 않 은 표 의 값 은 NULL 입 니 다.
type
표 접근 방법
possible_keys
사용 가능 한 인덱스
key
실제 색인
key_len
선택 한 인덱스 길이
ref
색인 등 값 조 회 를 사용 할 때 색인 과 비교 하 는 열 이나 상수
rows
읽 을 줄 수 예상
filtered
표 조건 에 따라 여과 한 후 남 겨 진 기록 수의 백분율
Extra
추가 정보
다음은 집행 계획 의 일부 중요 열 에 대한 상세 한 설명 을 살 펴 보 겠 습 니 다.
id:
SELECT 식별 자.검색 중인 SELECT 번호 입 니 다.이 줄 이 다른 줄 의 병합 결 과 를 참조 하면 값 은 NULL 일 수 있 습 니 다.id 와 동시에 실행 순 서 는 위 에서 아래로;id 가 같 지 않 을 때 id 값 이 클 수록 우선 순위 가 높 을 수록 먼저 실 행 됩 니 다.
select_type:
검색 의 유형,일반적인 값 은:
  • SIMPLE:간단 한 조 회 는 UNION 이나 하위 조 회 를 포함 하지 않 습 니 다
  • PRIMARY:조회 에 하위 조회 나 다른 부분 이 포함 되면 바깥쪽 의 SELECT 는 PRIMARY 로 표 시 됩 니 다
  • SUBQUERY:하위 조회 중의 첫 번 째 SELECT.
  • UNION:UNION 문구 에서 UNION 에 이 어 나타 난 SELECT.
  • DERIVED:FROM 에 나타 난 하위 조 회 는 DERIVED 로 표 시 됩 니 다
  • UNION RESULT:UNION 조회 결과.
  • table:
    검색 에 사용 되 는 표 이름 을 표시 합 니 다.줄 마다 해당 하 는 표 이름 이 있 습 니 다.표 이름 은 정상 적 인 표를 제외 하고 다음 과 같은 값 일 수도 있 습 니 다.
  • :본 줄 은 id 가 M 과 N 인 줄 의 UNION 결 과 를 인용 하 였 습 니 다
  • :본 줄 은 id 가 N 인 표 에서 발생 하 는 파생 표 결 과 를 인용 하 였 습 니 다.파생 표 는 FROM 구문 에서 하위 조회 가 발생 할 수 있 습 니 다
  • :본 줄 은 id 가 N 인 표 에서 발생 하 는 물 화 자 조회 결 과 를 참조 하 였 습 니 다
  • type:
    조회 실행 유형 은 조회 가 어떻게 실행 되 는 지 설명 합 니 다.모든 값 의 순 서 는 최 우선 에서 최 악 으로 정렬 합 니 다.
    system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL
    흔히 볼 수 있 는 몇 가지 유형의 구체 적 인 의 미 는 다음 과 같다.
  • system:만약 에 표 에서 사용 하 는 엔진 이 표 행 수 에 대한 통계 가 정확 하 다 면(예 를 들 어 MyISAM)표 에 한 줄 만 기록 한 상황 에서 방문 방법 은 system 이 고 const 의 특례 이다
  • 4.567917.const:표 에서 최대 한 줄 만 일치 하 는 기록 을 찾 을 수 있 습 니 다.한 번 조회 하면 찾 을 수 있 습 니 다.홈 키 나 유일한 색인 을 사용 하 는 모든 필드 를 조회 조건 으로 사용 합 니 다
  • eq_ref:연결 표 조회 시 이전 표 의 줄 은 현재 이 표 에서 한 줄 만 대응 합 니 다.시스템 과 const 를 제외 한 가장 좋 은 join 방식 으로 메 인 키 나 유일한 색인 을 사용 하 는 모든 필드 를 연결 표 조건 으로 사용 합 니 다
  • 4.567917.ref:일반 색인 을 조회 조건 으로 하고 조회 결 과 는 조건 에 맞 는 여러 줄 을 찾 을 수 있 습 니 다
  • index_merge:검색 조건 에 여러 개의 색인 을 사 용 했 을 때 Index Merge 최 적 화 를 열 었 음 을 표시 합 니 다.이 때 실행 계획 의 key 열 은 사 용 된 색인 을 보 여 줍 니 다
  • 4.567917.range:색인 열 에 대해 범 위 를 조회 하고 실행 계획 중의 key 열 은 어떤 색인 이 사용 되 었 는 지 표시 합 니 다
  • index:전체 색인 트 리 를 훑 어 보 았 습 니 다.ALL 과 유사 합 니 다.검색 한 것 은 색인 일 뿐 색인 은 보통 메모리 에 있 고 속도 가 빠 릅 니 다
  • ALL:전체 표 스 캔..
  • possible_keys:
    possible_keys 열 은 MySQL 에서 조 회 를 실행 할 때 사용 할 수 있 는 색인 을 표시 합 니 다.이 열 이 NULL 이면 사용 가능 한 색인 이 없 음 을 표시 합 니 다.이 경우 WHERE 구문 에 사 용 된 열 을 검사 해 이 열 에 있 는 하나 이상 의 색인 을 추가 하 는 방법 으로 검색 성능 을 향상 시 킬 수 있 는 지 확인 해 야 한다.
    key:
    key 열 은 MySQL 이 실제 사용 하 는 색인 을 표시 합 니 다.NULL 이면 색인 을 사용 하지 않 았 음 을 표시 합 니 다.
    key_len:
    key_len 열 은 MySQL 이 실제 사용 하 는 색인 의 최대 길 이 를 표시 합 니 다.연합 색인 을 사용 할 때 여러 열의 길이 와.수 요 를 만족 시 키 는 전제 에서 짧 을 수록 좋다.key 열 에 NULL 이 표시 되면 keylen 열 에 도 NULL 이 표 시 됩 니 다.
    rows:
    rows 열 은 표 통계 정보 와 선택 상황 에 따라 필요 한 기록 을 찾 거나 읽 어야 할 줄 수 를 대체적으로 계산 하고 수치 가 작 을 수록 좋다 고 밝 혔 다.
    Extra:
    이 열 은 MySQL 분석 조회 의 추가 정 보 를 포함 하고 있 습 니 다.이 정 보 를 통 해 MySQL 이 어떻게 조 회 를 실 행 했 는 지 더욱 정확하게 이해 할 수 있 습 니 다.일반적인 값 은 다음 과 같 습 니 다.
  • Using filesort:정렬 할 때 외부 색인 정렬 을 사 용 했 고 표 내 색인 으로 정렬 하지 않 았 습 니 다
  • Using temporary:MySQL 은 검색 결 과 를 저장 하기 위해 임시 표를 만들어 야 합 니 다.ORDER BY 와 GROUP BY 에서 흔히 볼 수 있 습 니 다
  • Using index:검색 은 덮어 쓰기 색인 을 사 용 했 음 을 나타 내 고 표 에 돌아 오지 않 아 도 검색 효율 이 매우 높다
  • Using index condition:검색 최적화 기 가 색인 을 사용 한 조건 에서 이 기능 을 밀 었 음 을 나타 낸다
  • Using where:검색 이 WHERE 자 구 를 사용 하여 조건 부 필 터 를 한 것 을 나타 낸다.보통 색인 을 사용 하지 않 을 때 나타 납 니 다
  • Using join buffer(Block Nested Loop):링크 조회 방식 은 드라이버 가 색인 을 사용 하지 않 았 을 때 MySQL 은 드라이버 를 읽 어서 join buffer 에 넣 고 드라이버 와 드라이버 를 옮 겨 다 니 며 조회 한 다 는 것 을 나타 낸다
  • 여기 서 Extra 열 에 Using filesort 나 Using temporary 가 포함 되 어 있 을 때 MySQL 의 성능 에 문제 가 있 을 수 있 으 므 로 가능 한 한 피해 야 한 다 는 것 을 알려 줍 니 다.
    이상 은 MySQL 실행 계획 의 상세 한 내용 을 배 워 드 리 는 것 입 니 다.MySQL 실행 계획 에 관 한 자 료 는 저희 의 다른 관련 글 을 주목 하 세 요!

    좋은 웹페이지 즐겨찾기