이 기사에서는 mysql에 대한 관련 지식을 제공하며, explain 명령은 주로 SQL 문의 실행 계획을 확인하고 SQL 문이 인덱스를 사용하는지 확인하는 데 사용됩니다. 그것이 모두에게 도움이 되기를 바랍니다.
추천 학습: mysql tutorial
explain 명령은 주로 SQL 문의 실행 계획을 확인하고, SQL 문의 인덱스 사용 여부, 전체 테이블 스캔 수행 여부 등을 확인하는 데 사용됩니다. MySQL이 사용자 SQL 문을 처리하는 방법을 알기 위해 SQL 쿼리 문을 실행하는 최적화 프로그램을 시뮬레이션할 수 있습니다.
Explain 문을 통해 다음과 같은 결과를 분석할 수 있습니다
테이블 읽기 순서 | 데이터 읽기 작업의 작업 유형 |
---|---|
tables | 어떤 인덱스를 사용할 수 있나요? |
옵티마이저는 각 테이블의 몇 행을 쿼리하나요? | 어떤 인덱스가 실제로 사용되나요? |
필드
설명id
select_type | |
---|---|
table | 결과 집합을 출력하는 테이블 |
type | 테이블의 연결 유형 |
possible_keys | 쿼리 시 사용할 수 있는 인덱스 |
key | 실제 사용된 인덱스 |
key_len | 인덱스 필드의 길이 |
ref | 컬럼과 인덱스의 비교 |
rows | 스캔한 라인 수(예상 라인 수) |
Extra | 실행 설명 및 설명 |
3. 각 필드의 의미를 설명하세요3.1 id ● id 相同,执行顺序由上至下,与sql中顺序无关 ● 如果是子查询,id的序号会递增,id越大优先级越高,越先被执行 ● id 如果相同,可以认为是一组,从上往下顺序执行;在所有组中id值越大,优先级越高,越先执行。 3.2 select_type (1) simple (简单select,不使用union或子查询等任何复杂查询) (2) primary (子查询中最外层查询,查询中若包含任何复杂的子部分,最外层的select被标记为primary) (3) subquery (在select或where列表中包含了子查询) (4) derived (在from列表中包含的子查询被标记为derived(衍生),MySQL会递归执行这些子查询,把结果放在临时表中) (5) union (union中的第二个或后面的select语句) (6) union result (union的结果,union语句中第二个select开始后面所有select) 3.3 table 3.4 type ● all :Full Table Scan, MySQL将遍历全表以找到匹配的行 ● index : Full Index Scan,index与ALL区别为index类型只遍历索引树 ● range:只检索给定范围的行,使用一个索引来选择行 ● ref: 表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值 ● eq_ref : 类似ref,区别就在使用的索引是唯一索引,对于每个索引键值,表中只有一条记录匹配,简单来说,就是多表连接中使用primary key或者 unique key作为关联条件 ● const、system : 当MySQL对查询某部分进行优化,并转换为一个常量时,使用这些类型访问。如将主键置于where列表中,MySQL就能将该查询转换为一个常量,system是const类型的特例,当查询的表只有一行的情况下使用system。 ● NULL : MySQL在优化过程中分解语句,执行时甚至不用访问表或索引,例如从一个索引列里选取最小值可以通过单独索引查找完成。 3.5 possible_keys select_type 은 쿼리의 각 select 절 유형을 표시합니다. 일반적으로 사용되는 select_type 유형에는 simple , 기본, 하위 쿼리, 파생, 공용체, 공용체 결과🎜🎜 (1) 🎜simple🎜(사용하지 않고 간단한 선택)이 있습니다. 통합 또는 하위 쿼리와 같은 복잡한 쿼리)🎜🎜🎜🎜 (2) 🎜primary🎜(하위 쿼리의 가장 바깥쪽 쿼리, 쿼리에 복잡한 하위 부분이 포함된 경우 가장 바깥쪽 선택이 기본으로 표시됨)🎜🎜🎜🎜 (6) 🎜union 결과🎜 (연합의 결과, 는 통합문의 두 번째 선택은 모든 후속 선택으로 시작됩니다. 20210419154049799"/>🎜🎜🎜3.3 table🎜🎜 table 이 단계에서 액세스한 데이터베이스의 테이블 이름을 표시합니다(이 행의 데이터가 참조하는 테이블을 표시합니다). 🎜🎜🎜3.4 type🎜🎜 type 은 쿼리에 어떤 유형이 사용되는지 보여줍니다. 유형에는 all, index, range, ref, eq_ref, const, system 및 NULL이 포함됩니다. 🎜🎜 ● 🎜all🎜: 전체 테이블 스캔, MySQL은 전체 테이블을 탐색하여 일치하는 행을 찾습니다🎜🎜🎜🎜 ● 🎜index🎜: 전체 인덱스 스캔, 인덱스와 ALL의 차이점은 인덱스 유형이 인덱스 트리만 통과한다는 것입니다🎜🎜🎜🎜 ● 🎜range🎜: 다음을 사용하여 지정된 행 범위만 검색합니다. 색인 행을 선택하려면🎜 🎜 🎜🎜 ● 🎜ref🎜: 위 표의 조인 일치 조건, 즉 인덱스 열의 값을 찾기 위해 어떤 열이나 상수를 사용하는지를 뜻합니다🎜🎜🎜🎜 ● 🎜eq_ref🎜: ref와 유사하게, 차이점은 사용된 인덱스가 고유 인덱스라는 점입니다. 열쇠 즉, 다중 테이블 연결에서 기본 키나 고유 키를 연결 조건으로 사용하는 것입니다. 🎜🎜 ● 🎜const, system🎜: MySQL이 값의 특정 부분을 최적화할 때 쿼리하고 이를 상수로 변환하려면 이러한 유형을 사용하여 액세스하세요. 기본 키가 where 목록에 있으면 MySQL은 쿼리를 상수로 변환할 수 있습니다. System은 쿼리된 테이블에 행이 하나만 있는 경우 const 유형의 특수한 경우입니다. 🎜🎜🎜🎜 ● 🎜NULL 🎜 : MySQL 명령문은 최적화 중에 분해되어 테이블이나 인덱스에 액세스하지 않고도 실행됩니다. 예를 들어 인덱스 열에서 최소값을 선택하는 것은 별도의 인덱스 조회를 통해 수행할 수 있습니다. 🎜🎜🎜3.5 available_keys🎜🎜 possible_keys 이 테이블에 적용될 수 있는 하나 이상의 인덱스를 표시합니다. 쿼리에 포함된 필드에 인덱스가 있는 경우 해당 인덱스가 나열되지만 실제로 쿼리에서 사용되지 않을 수 있습니다. (이 쿼리가 활용할 수 있는 인덱스, 인덱스가 없으면 null로 표시됩니다) 🎜3.6 key 3.7 key_len 3.8 ref 3.9 rows 3.10 Extra 3.7 key_len 3.8 ref인덱스의 어떤 열이 사용되는지 표시하여 위 표의 연결 일치 조건, 즉 인덱스 열의 값을 찾는 데 어떤 열이나 상수가 사용되는지를 나타냅니다
3.9행 3.10 Extra ●임시 테이블을 사용한다는 것은 MySQL이 결과 세트를 저장하기 위해 임시 테이블을 사용해야 함을 의미합니다. 이는 정렬 및 그룹화 쿼리에서 일반적입니다. 쿼리에는 순서별 연산이 포함되어 있는데 인덱스를 사용하여 완료할 수 없는 정렬 연산을 "파일 정렬"이라고 합니다 ●●조인 버퍼 사용 변경된 값은 조인 조건을 얻을 때 인덱스를 사용하지 않는다는 점을 강조하고, 조인 중간 결과를 저장하려면 버퍼가 필요합니다. 이 값이 나타나면 쿼리의 특정 조건에 따라 성능 향상을 위해 인덱스를 추가해야 할 수도 있다는 점에 유의해야 합니다. ●Impossible where 이 값은 where 문에서 조건을 만족하는 행이 발생하지 않는다는 점을 강조합니다(통계 수집으로는 결과가 존재할 수 없음). ●최적화된 테이블 선택 이 값은 인덱스만 사용하면 최적화 프로그램이 집계 함수 결과에서 하나의 행만 반환할 수 있음을 의미합니다. ● 🎜사용된 테이블 없음 Query🎜 문을 사용하거나 from 절 없이 🎜 🎜🎜 IV. 요약 🎜🎜 ● explain은 트리거, 저장 프로시저 또는 사용자 정의 함수가 쿼리에 미치는 영향에 대한 정보를 알려주지 않습니다. 🎜🎜 ● explain은 다양한 캐시를 고려하지 않습니다. 🎜🎜 ● explain은 MySQL 실행을 표시할 수 없습니다. 최적화 작업이 완료되었습니다. 쿼리 중🎜🎜 ● explain은 select 작업만 설명할 수 있으며, select 이후 실행 계획을 보려면 다른 작업을 다시 작성해야 합니다🎜🎜 ● 일부 통계 정보는 추정된 것이며 정확한 값은 아닙니다🎜🎜권장 학습: 🎜mysql 비디오 튜토리얼🎜 🎜 |
위 내용은 MySQL 학습에서 explain 사용법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!