MySQL EXPLAIN 문장의 사용 예시

6807 단어 MySQLEXPLAIN문장
MySQL 최적화 부분 에서 우리 가 먼저 알 아야 할 것 은 바로 현재 의 이 SQL 문장 이 실제 데이터베이스 에서 어떻게 실행 되 는 지,어떻게 최적화 되 어야 하 는 지 를 말 할 수 있다.그리고 MySQL 에서 우리 에 게 아 날로 그 문 구 를 실행 하 는 아주 좋 은 키 워드 를 제공 했다.EXPLAIN.EXPLAIN 은 SQL 문장의 실행 효 과 를 볼 수 있 고 더 좋 은 색인 과 최적화 검색 어 를 선택 하여 더 좋 은 최적화 문 구 를 쓸 수 있 습 니 다.그래서 오늘 우 리 는 이 키워드 의 기본 적 인 용법 과 응용 에 대해 이야기 합 시다.
사용 방법
EXPLAIN 의 사용법 은 매우 간단 하 다.

mysql> EXPLAIN SELECT * FROM user;
간단하게 말 하면 기 존의 SQL 문장 앞 에 EXPLAIN 키 워드 를 붙 이거 나 EXPLAIN 키 워드 를 붙 인 다음 에 검사 할 SQL 문장 을 붙 이 는 것 이다.
출력 결과
EXPLAIN 문장의 출력 결과 야 말로 우리 가 원 하 는 데이터 이자 우리 가 분석 하 는 중점 이다.
우 리 는 먼저 위의 문구 가 준 대응 하 는 결과 의 형식 을 살 펴 보 자.

+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+
| 1 | SIMPLE  | user | NULL  | ALL | NULL   | NULL | NULL | NULL | 3 | 100.00 | NULL |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+
EXPLAIN 문 구 는 우리 에 게 준 데 이 터 는 모두 10 열 이 있 습 니 다.다음은 성능 최적화 에 있어 비교적 중요 한 역할 을 하 는 데이터 열 이 대표 하 는 뜻 을 살 펴 보 겠 습 니 다.
1.id
이것 은 select 조회 의 시리 얼 번호 입 니 다.
2.select_type
우리 의 SQL 문장 이 selection 문장 이 아 닐 때(즉 delete,update...)이 필드 의 값 은 대응 하 는 조작 형식(delete,update..)입 니 다.

mysql> EXPLAIN INSERT INTO user VAULES(2,'ahong','31');
이때 출력 selecttype 은 우리 가 대응 하 는 INSERT 입 니 다.

+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+
| 1 | INSERT  | user | NULL  | ALL | NULL   | NULL | NULL | NULL | NULL |  NULL | NULL |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+
그리고 SQL 문 구 를 사용 할 때 selection 문 구 를 사용 할 때 그 는 해당 하 는 상세 한 select 유형 으로 다음 과 같은 몇 가지 가 있 습 니 다.

SIMPLE:  SELECT(   UNION     )
PRIMARY:    SELECT
UNION:UNION         SELECT  
DEPENDENT UNION:UNION         SELECT  ,        
UNION RESULT:UNION   。
SUBQUERY:        SELECT
DEPENDENT SUBQUERY:        SELECT,        
DERIVED:    SELECT(FROM      )
다음은 가장 간단 한 SIMPLE 조회 의 예 입 니 다.

mysql> EXPLAIN SELECT * FROM user;

+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+
| 1 | SIMPLE  | user | NULL  | ALL | NULL   | NULL | NULL | NULL | 3 | 100.00 | NULL |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+
3.table
이 작업 에 접근 한 데 이 터 를 표시 합 니 다.
4.partitions
표 에 사 용 된 구역 을 표시 합 니 다.10 년 동안 회사 가 주문 한 금액 을 통계 하려 면 데 이 터 를 10 개 구역 으로 나 누 어 매년 한 구역 을 대표 할 수 있 습 니 다.이렇게 하면 조회 효율 을 크게 높 일 수 있다.
5.type
이것 은 가장 중요 한 열 이다.연결 이 어떤 분 류 를 사 용 했 는 지,색인 을 사 용 했 는 지 보 여 줍 니 다.조회 성능 을 분석 하 는 관건 이다.
그 결과 성능 이 좋 은 것 부터 나 쁜 것 까지 다음 과 같은 상황 이 있다.

system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL
이 몇 가지 상황 이 대표 하 는 의 미 는 다음 과 같다.
  • system,const:조회 변 수 를 상수 로 바 꿀 수 있 습 니 다.예 를 들 어 id=1;id 는 메 인 키 또는 유일한 키 입 니 다.
  • eq_ref:색인 에 접근 하여 한 줄 의 데 이 터 를 되 돌려 줍 니 다.
  • ref:색인 에 접근 하여 특정한 값 의 데 이 터 를 되 돌려 줍 니 다.(여러 줄 로 되 돌아 갈 수 있 습 니 다)보통 사용=시 발생 합 니 다
  • range:이 연결 유형 은 색인 을 사용 하여 한 범위 의 줄 을 되 돌려 줍 니 다.예 를 들 어 사용>또는<물건 찾기,그리고 이 필드 에 색인 이 있 을 때 발생 하 는 상황(주:index 보다 좋 은 것 은 아 닙 니 다)
  • index:색인 순서 로 전체 표 스 캔 을 하 는데 장점 은 정렬 하지 않 아 도 되 고 단점 은 전체 표 스 캔 을 해 야 한 다 는 것 이다
  • ALL:전체 표 스 캔 은 가능 한 한 피해 야 합 니 다
  • 일반적으로 조회 가 적어도 range 단계 에 이 르 도록 보증 해 야 하 며,ref 에 도달 하 는 것 이 좋 습 니 다.그렇지 않 으 면 성능 문제 가 발생 할 수 있 습 니 다.
    6.possible_key
    검색 어 에 사용 할 수 있 는 색인 열 을 표시 합 니 다.값 은 하나,여러 개 또는 null 일 수 있 습 니 다.
    7.key
    key 열 은 이 검색 어 에 실제 사용 되 는 색인 열 을 표시 합 니 다.null 이면 색인 을 사용 하지 않 았 음 을 표시 합 니 다.
    possible 보 여 주세요.key 와 key 의 실제 효과:
    다음은 age 열 에 색인 을 만 드 는 데이터 시트 입 니 다.아래 의 조 회 를 진행 하 겠 습 니 다.
    
    mysql> explain select * from user where age = 1;
    다음 과 같은 결 과 를 얻 을 수 있 습 니 다.
    
    +----+-------------+-------+------------+------+---------------+------+---------+-------+------+----------+-------+
    | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
    +----+-------------+-------+------------+------+---------------+------+---------+-------+------+----------+-------+
    | 1 | SIMPLE  | user | NULL  | ref | age   | age | 5  | const | 1 | 100.00 | NULL |
    +----+-------------+-------+------------+------+---------------+------+---------+-------+------+----------+-------+
    8.key_len
    현재 검색 어 에 사용 되 는 색인 길 이 를 표시 합 니 다.정확성 을 잃 지 않 는 상황 에서 길 이 는 짧 을 수록 좋다.
    9.ref
    인용 한 이전 표 의 열.
    10.rows
    표 의 상황 과 조회 문장의 상황 에 따라 MySQL 은 최종 결 과 를 되 돌려 주 는 데 필요 한 줄 의 수 를 추산 합 니 다.이 열의 값 이 클 수록 조회 효율 이 떨어진다.
    11.filtered
    하나의 백분율 값 을 rows 열 값 과 함께 사용 하면 실행 계획(QEP)의 이전 표 의 결과 집합 을 조회 하여 join 작업 의 순환 횟수 를 확인 할 수 있 습 니 다.작은 시계 가 큰 시 계 를 구동 하여 연결 횟수 를 줄이다.
    12.extra
    MySQL 이 조회 의 추가 정 보 를 어떻게 해석 하 는 지 에 대해 서 는 다음 과 같은 몇 가지 가 있 습 니 다.
    Extra 에 포 함 된 값:
  • using index:색인 만 사용 하면 방문 표를 피 할 수 있 고 성능 이 높 습 니 다
  • using where:where 에 데 이 터 를 걸 러 내 는 것 은 모든 where clause 가 using where 를 표시 하 는 것 이 아 닙 니 다.예 를 들 어=방식 으로 색인 에 접근 합 니 다
  • 4.567917.using tmporary:현재 조 회 를 임시 표 로 처리 합 니 다
  • using filesort:추가 정렬 을 사용 합 니 다.이때 my sql 은 연결 유형 에 따라 모든 조건 에 맞 는 기록 을 조회 하고 정렬 키워드 와 줄 지침 을 저장 한 다음 에 키 워드 를 정렬 하고 순서대로 줄 을 검색 합 니 다.(order by v1 을 사용 하고 색인 을 사용 하지 않 을 때 추가 정렬 을 사용 합 니 다)
  • range checked for eache record(index map:N):좋 은 색인 이 없습니다
  • Using index for group-by:__색인 에서 그룹 을 나 누 는 데 필요 한 모든 데 이 터 를 찾 을 수 있 음 을 나타 내 며 실제 표를 조회 할 필요 가 없습니다.explain select user_id from t_order group by user_id;_
  • 이상 은 MySQL EXPLAIN 문장의 사용 예시 에 대한 상세 한 내용 입 니 다.MySQL EXPLAIN 문장 에 대한 자 료 는 저희 의 다른 관련 문장 을 주목 해 주 십시오!

    좋은 웹페이지 즐겨찾기