> 데이터 베이스 > MySQL 튜토리얼 > MySQL 학습에서 explain 사용법에 대한 자세한 설명

MySQL 학습에서 explain 사용법에 대한 자세한 설명

WBOY
풀어 주다: 2022-03-07 16:56:13
앞으로
2538명이 탐색했습니다.

이 기사에서는 mysql에 대한 관련 지식을 제공하며, explain 명령은 주로 SQL 문의 실행 계획을 확인하고 SQL 문이 인덱스를 사용하는지 확인하는 데 사용됩니다. 그것이 모두에게 도움이 되기를 바랍니다.

MySQL 학습에서 explain 사용법에 대한 자세한 설명

추천 학습: mysql tutorial

explain 명령은 주로 SQL 문의 실행 계획을 확인하고, SQL 문의 인덱스 사용 여부, 전체 테이블 스캔 수행 여부 등을 확인하는 데 사용됩니다. MySQL이 사용자 SQL 문을 처리하는 방법을 알기 위해 SQL 쿼리 문을 실행하는 최적화 프로그램을 시뮬레이션할 수 있습니다.

1. explain이 할 수 있는 일

 Explain 문을 통해 다음과 같은 결과를 분석할 수 있습니다

MariaDB [class_info]> explain select * from student;
+--+-----------+-------+----+-------------+-----+-------+-----+----+-----+
|id|select_type| table |type|possible_keys| key |key_len| ref |rows|Extra|
+--+-----------+-------+----+-------------+-----+-------+-----+----+-----+
| 1|   SIMPLE  |student| ALL|     NULL    | NULL| NULL  | NULL|  1 |     |
+--+-----------+-------+----+-------------+-----+-------+-----+----+-----+
1 row in set (0.00 sec)
로그인 후 복사
테이블 읽기 순서 데이터 읽기 작업의 작업 유형
tables 어떤 인덱스를 사용할 수 있나요?
옵티마이저는 각 테이블의 몇 행을 쿼리하나요? 어떤 인덱스가 실제로 사용되나요?
   expain에는 id, select_type, table, type, available_keys, key, key_len, ref, 행, Extra

요약 설명:

필드

설명

id식별자 선택 쿼리 유형
select_type
table 결과 집합을 출력하는 테이블
type 테이블의 연결 유형
possible_keys 쿼리 시 사용할 수 있는 인덱스
key 실제 사용된 인덱스
key_len 인덱스 필드의 길이
ref 컬럼과 인덱스의 비교
rows 스캔한 라인 수(예상 라인 수)
Extra 실행 설명 및 설명

3. 각 필드의 의미를 설명하세요

3.1 id

id는 숫자 집합을 포함하는 선택 쿼리의 시퀀스 번호로, 선택 절이나 작업 테이블의 순서를 나타냅니다. 쿼리에서 실행됩니다. id의 결과는 다음과 같은 세 가지 상황이 있습니다. id是select查询的序列号,包含一组数字,表示查询中执行select子句或操作表的顺序。id的结果有以下三种情况:

  ● id 相同,执行顺序由上至下,与sql中顺序无关

MySQL 학습에서 explain 사용법에 대한 자세한 설명

  ● 如果是子查询,id的序号会递增,id越大优先级越高,越先被执行

  ● id 如果相同,可以认为是一组,从上往下顺序执行;在所有组中id值越大,优先级越高,越先执行。

MySQL 학습에서 explain 사용법에 대한 자세한 설명


3.2 select_type

  select_type显示示查询中每个select子句的类型,常用的select_type的类型有simple、primary、subquery、derived、union、union result

  (1) simple (简单select,不使用union或子查询等任何复杂查询)

MySQL 학습에서 explain 사용법에 대한 자세한 설명

  (2) primary (子查询中最外层查询,查询中若包含任何复杂的子部分,最外层的select被标记为primary)

MySQL 학습에서 explain 사용법에 대한 자세한 설명

  (3) subquery (在select或where列表中包含了子查询)

  (4) derived (在from列表中包含的子查询被标记为derived(衍生),MySQL会递归执行这些子查询,把结果放在临时表中)

  (5) union (union中的第二个或后面的select语句)

MySQL 학습에서 explain 사용법에 대한 자세한 설명

  (6) union result (union的结果,union语句中第二个select开始后面所有select)

MySQL 학습에서 explain 사용법에 대한 자세한 설명


3.3 table

  table显示这一步所访问数据库中表名称 (显示这一行的数据是关于哪张表的)。


3.4 type

  type所显示的是查询使用了哪种类型,type包含的类型有all、index、range、ref、eq_ref、const、system、NULL,它的性能依次递增。

  ● all :Full Table Scan, MySQL将遍历全表以找到匹配的行

MySQL 학습에서 explain 사용법에 대한 자세한 설명

  ● index : Full Index Scan,index与ALL区别为index类型只遍历索引树

MySQL 학습에서 explain 사용법에 대한 자세한 설명

  ● range:只检索给定范围的行,使用一个索引来选择行

MySQL 학습에서 explain 사용법에 대한 자세한 설명

  ● ref: 表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值

MySQL 학습에서 explain 사용법에 대한 자세한 설명

  ● eq_ref : 类似ref,区别就在使用的索引是唯一索引,对于每个索引键值,表中只有一条记录匹配,简单来说,就是多表连接中使用primary key或者 unique key作为关联条件

  ● const、system : 当MySQL对查询某部分进行优化,并转换为一个常量时,使用这些类型访问。如将主键置于where列表中,MySQL就能将该查询转换为一个常量,system是const类型的特例,当查询的表只有一行的情况下使用system。

MySQL 학습에서 explain 사용법에 대한 자세한 설명

  ● NULL : MySQL在优化过程中分解语句,执行时甚至不用访问表或索引,例如从一个索引列里选取最小值可以通过单独索引查找完成。


3.5 possible_keys

  possible_keys ●● id가 동일하고 sql

MySQL 학습에서 explain 사용법에 대한 자세한 설명🎜🎜 ● 서브쿼리인 경우 해당 아이디의 일련번호가 증가합니다. , 우선 순위가 높을수록 더 빨리 실행됩니다🎜🎜🎜🎜 ● id 동일하면 위에서 아래로 그룹으로 간주할 수 있습니다. 모든 그룹에서 다음 순서로 실행합니다. id 값이 클수록 우선 순위가 높아지고 일찍 실행됩니다. 🎜🎜여기에 이미지 설명 삽입🎜🎜🎜3.2 select_type🎜 🎜 select_type은 쿼리의 각 select 절 유형을 표시합니다. 일반적으로 사용되는 select_type 유형에는 simple , 기본, 하위 쿼리, 파생, 공용체, 공용체 결과🎜🎜 (1) 🎜simple🎜(사용하지 않고 간단한 선택)이 있습니다. 통합 또는 하위 쿼리와 같은 복잡한 쿼리)🎜🎜image- 20210419152207657🎜🎜 (2) 🎜primary🎜(하위 쿼리의 가장 바깥쪽 쿼리, 쿼리에 복잡한 하위 부분이 포함된 경우 가장 바깥쪽 선택이 기본으로 표시됨)🎜🎜Image-20210419152451499 🎜🎜  (6) 🎜union 결과🎜 (연합의 결과, 는 통합문의 두 번째 선택은 모든 후속 선택으로 시작됩니다. 20210419154049799"/>🎜🎜🎜3.3 table🎜🎜 table이 단계에서 액세스한 데이터베이스의 테이블 이름을 표시합니다(이 행의 데이터가 참조하는 테이블을 표시합니다). 🎜🎜🎜3.4 type🎜🎜 type은 쿼리에 어떤 유형이 사용되는지 보여줍니다. 유형에는 all, index, range, ref, eq_ref, const, system 및 NULL이 포함됩니다. 🎜🎜 ● 🎜all🎜: 전체 테이블 스캔, MySQL은 전체 테이블을 탐색하여 일치하는 행을 찾습니다🎜🎜MySQL 학습에서 explain 사용법에 대한 자세한 설명🎜🎜 ● 🎜index🎜: 전체 인덱스 스캔, 인덱스와 ALL의 차이점은 인덱스 유형이 인덱스 트리만 통과한다는 것입니다🎜🎜MySQL 학습에서 explain 사용법에 대한 자세한 설명🎜🎜 ● 🎜range🎜: 다음을 사용하여 지정된 행 범위만 검색합니다. 색인 행을 선택하려면🎜 🎜 여기에 이미지 설명 삽입🎜🎜 ● 🎜ref🎜: 위 표의 조인 일치 조건, 즉 인덱스 열의 값을 찾기 위해 어떤 열이나 상수를 사용하는지를 뜻합니다🎜🎜MySQL 학습에서 explain 사용법에 대한 자세한 설명🎜🎜 ● 🎜eq_ref🎜: ref와 유사하게, 차이점은 사용된 인덱스가 고유 인덱스라는 점입니다. 열쇠 즉, 다중 테이블 연결에서 기본 키나 고유 키를 연결 조건으로 사용하는 것입니다. 🎜🎜 ● 🎜const, system🎜: MySQL이 값의 특정 부분을 최적화할 때 쿼리하고 이를 상수로 변환하려면 이러한 유형을 사용하여 액세스하세요. 기본 키가 where 목록에 있으면 MySQL은 쿼리를 상수로 변환할 수 있습니다. System은 쿼리된 테이블에 행이 하나만 있는 경우 const 유형의 특수한 경우입니다. 🎜🎜MySQL 학습에서 explain 사용법에 대한 자세한 설명🎜🎜 ● 🎜NULL 🎜 : MySQL 명령문은 최적화 중에 분해되어 테이블이나 인덱스에 액세스하지 않고도 실행됩니다. 예를 들어 인덱스 열에서 최소값을 선택하는 것은 별도의 인덱스 조회를 통해 수행할 수 있습니다. 🎜🎜🎜3.5 available_keys🎜🎜 possible_keys이 테이블에 적용될 수 있는 하나 이상의 인덱스를 표시합니다. 쿼리에 포함된 필드에 인덱스가 있는 경우 해당 인덱스가 나열되지만 실제로 쿼리에서 사용되지 않을 수 있습니다. (이 쿼리가 활용할 수 있는 인덱스, 인덱스가 없으면 null로 표시됩니다) 🎜

3.6 key

key는 MySQL이 실제로 사용하기로 결정한 키(인덱스)를 표시하며, available_keys에 포함되어야 합니다. 인덱스를 선택하지 않은 경우 NULL입니다. MySQL이 available_keys 열의 인덱스를 사용하거나 무시하도록 하려면 쿼리에서 인덱스 강제 적용, 인덱스 사용 또는 인덱스 무시를 사용하세요. key显示MySQL实际决定使用的键(索引),必然包含在possible_keys中。如果没有选择索引,则是NULL。要想强制MySQL使用或忽视possible_keys列中的索引,在查询中使用force indexuse index 或者 ignore index


3.7 key_len

  key_len表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度(key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的),在不损失精确性的情况下,长度越短越好

MySQL 학습에서 explain 사용법에 대한 자세한 설명


3.8 ref

  ref显示索引的那一列被使用,表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值

MySQL 학습에서 explain 사용법에 대한 자세한 설명


3.9 rows

  rows估算出结果集的行数,表示MySQL根据表统计信息及索引选用情况,估算的找到所需的记录所需要读取的行数。

MySQL 학습에서 explain 사용법에 대한 자세한 설명


3.10 Extra

  Extra

3.7 key_len

key_len은 인덱스에 사용된 바이트 수를 나타냅니다. 쿼리에 사용된 인덱스의 길이는 이 열을 통해 계산할 수 있습니다. (key_len에 표시되는 값은 가능한 최대값입니다. 사용된 실제 길이가 아닌 인덱스 필드의 길이입니다(즉, key_len은 테이블에서 검색되지 않고 테이블 정의를 기반으로 계산됩니다). 정확성을 잃지 않고 길이가 짧을수록 좋습니다. MySQL 학습에서 explain 사용법에 대한 자세한 설명

3.8

  ref인덱스의 어떤 열이 사용되는지 표시하여 위 표의 연결 일치 조건, 즉 인덱스 열의 값을 찾는 데 어떤 열이나 상수가 사용되는지를 나타냅니다

MySQL 학습에서 explain 사용법에 대한 자세한 설명

3.9행   예상 결과 세트 행 이 숫자는 MySQL이 테이블 통계 및 인덱스 선택을 기반으로 필요한 레코드를 찾기 위해 읽어야 하는 행 수를 추정한다는 것을 나타냅니다.

여기에 이미지 설명 삽입

3.10 Extra

추가이 열에는 MySQL 쿼리 해결에 대한 자세한 정보가 포함되어 있습니다. 다음과 같은 상황이 있습니다.

 요청된 열이 모두 동일한 인덱스의 일부인 경우 MySQL 서버가 다음 행을 검색한다는 의미입니다. 스토리지 엔진 필터

 ●

임시 테이블을 사용한다는 것은 MySQL이 결과 세트를 저장하기 위해 임시 테이블을 사용해야 함을 의미합니다. 이는 정렬 및 그룹화 쿼리에서 일반적입니다. 쿼리에는 순서별 연산이 포함되어 있는데 인덱스를 사용하여 완료할 수 없는 정렬 연산을 "파일 정렬"이라고 합니다

 ●●

조인 버퍼 사용

변경된 값은 조인 조건을 얻을 때 인덱스를 사용하지 않는다는 점을 강조하고, 조인 중간 결과를 저장하려면 버퍼가 필요합니다. 이 값이 나타나면 쿼리의 특정 조건에 따라 성능 향상을 위해 인덱스를 추가해야 할 수도 있다는 점에 유의해야 합니다.

 ●

Impossible where

이 값은 where 문에서 조건을 만족하는 행이 발생하지 않는다는 점을 강조합니다(통계 수집으로는 결과가 존재할 수 없음).

 ●

최적화된 테이블 선택 이 값은 인덱스만 사용하면 최적화 프로그램이 집계 함수 결과에서 하나의 행만 반환할 수 있음을 의미합니다.

 ● 🎜사용된 테이블 없음 Query🎜 문을 사용하거나 from 절 없이 🎜 🎜🎜 IV. 요약 🎜🎜 ● explain은 트리거, 저장 프로시저 또는 사용자 정의 함수가 쿼리에 미치는 영향에 대한 정보를 알려주지 않습니다. 🎜🎜 ● explain은 다양한 캐시를 고려하지 않습니다. 🎜🎜 ● explain은 MySQL 실행을 표시할 수 없습니다. 최적화 작업이 완료되었습니다. 쿼리 중🎜🎜 ● explain은 select 작업만 설명할 수 있으며, select 이후 실행 계획을 보려면 다른 작업을 다시 작성해야 합니다🎜🎜 ● 일부 통계 정보는 추정된 것이며 정확한 값은 아닙니다🎜🎜권장 학습: 🎜mysql 비디오 튜토리얼🎜 🎜

위 내용은 MySQL 학습에서 explain 사용법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:csdn.net
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿