찾다
데이터 베이스MySQL 튜토리얼MySQL에서의 explain 사용법 요약(상세)


이 글은 MySQL에서의 explain 사용법을 요약(자세히)한 것입니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

실행 계획(쿼리 실행 계획)

Syntax

explain select * from table

explain

expain의 열에는 10개의 열이 있으며,
id, select_type, table, type, partitions, available_keys, key, key_len, ref,rows, 추가로, 이러한 필드의 모양에 대한 가능한 설명은 다음과 같습니다.

1. ID

SQL 실행 순서 식별, SQL은 큰 것부터 작은 것까지 실행됩니다.

1. 실행순서 위에서 아래로

2. 서브쿼리인 경우 ID값이 클수록 우선순위가 높아지며, 일찍 실행됩니다

3. ID는 동일하므로 위에서 아래로 그룹으로 간주할 수 있습니다. 모든 그룹에서 순차적으로 실행되며, ID 값이 클수록 우선 순위가 높아지고 더 일찍 실행됩니다

2. 쿼리의 각 SELECT 절 유형을 나타냅니다.

1 SIMPLE: 단순 SELECT, UNION 또는 하위 쿼리는 적용할 수 없습니다.

2. 기본: 가장 바깥쪽 선택.

3. UNION: 두 번째 레이어에서는 SELECT 다음에 UNION이 사용됩니다.

4. DEPENDENT UNION: UNION 문의 두 번째 SELECT는 외부 하위 쿼리에 따라 다릅니다.

5. UNION 결과: UNION의 결과입니다.

6. SUBQUERY: 하위 쿼리의 첫 번째 SELECT입니다.

7. 종속 하위 쿼리: 하위 쿼리의 첫 번째 SELECT는 외부 쿼리에 따라 다릅니다.

8

11. UNCACHEABLE UNION: UNION은 캐시할 수 없는 하위 쿼리의 두 번째 또는 마지막 선택에 속합니다.

3.table

출력 행에서 참조하는 테이블의 이름입니다. 이는 다음 값 중 하나일 수도 있습니다.

M

,
  • N

    ,...>: 이 행은 id 값 M과 id를 나타냅니다. 값은 N의 합집합입니다. N

    >: 행은 해당 행과 함께 파생된 테이블 결과 ID에 사용된 N 값을 참조합니다. 예를 들어 파생 테이블은 FROM 절의 하위 쿼리
  • N

    >에서 나올 수 있습니다. 행은 ID 값이
  • 4인 행에 대한 구체화된 하위 쿼리의 결과를 나타냅니다.
  • 은 MySQL이 테이블에서 필요한 행을 찾는 방법("액세스 유형"이라고도 함)을 나타냅니다. 일반적으로 사용되는 유형은 다음과 같습니다: NULL, system, const, eq_ref, ref, range, index, ALL(왼쪽에서 오른쪽으로, 성능이 가장 나쁜 것부터 가장 좋은 것 순) 다음 목록에서는 가장 좋은 유형부터 가장 나쁜 유형까지의 연결 유형을 설명합니다.

NULL

MySQL은 최적화 프로세스 중에 명령문을 분해하며 실행 중에 테이블이나 인덱스에 액세스할 필요도 없습니다. 예를 들어 인덱스 열에서 최소값을 선택하는 것은 별도의 인덱스 조회를 통해 완료할 수 있습니다.

system

이 테이블에는 행이 하나만 있습니다(예: 시스템 테이블). 이것은 const 조인 유형

const의 특별한 경우입니다. 테이블에는 최대 하나의 일치하는 행이 있으며 쿼리 시작 부분에서 읽습니다. 행이 하나뿐이므로 나머지 최적화 프로그램은 이 행에 있는 열의 값을 상수로 처리할 수 있습니다. const 테이블은 한 번만 읽기 때문에 매우 빠릅니다.

SELECT * FROM tbl_name WHERE primary_key=1;
SELECT * FROM tbl_name WHERE primary_key_part1=1 AND primary_key_part2=2;

eq_ref 이전 테이블의 각 행 조합에 대해 이 테이블에서 한 행을 읽습니다. system 및 const 유형 외에도 이는 최상의 연결 유형입니다. 조인이 인덱스의 모든 부분을 사용하고 인덱스가 PRIMARY KEY 인덱스 또는 UNIQUE NOT NULL 인덱스인 경우에 사용됩니다.

SELECT * FROM ref_table,other_table
  WHERE ref_table.key_column=other_table.column;

SELECT * FROM ref_table,other_table
    WHERE ref_table.key_column_part1=other_table.column
    AND ref_table.key_column_part2=1;

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

fulltext FULLTEXT 인덱스를 사용하여 연결을 수행합니다.

ref_or_null

SELECT * FROM ref_table WHERE key_column IS NULL;

index_merge

인덱스 병합 액세스 방법은 범위 스캔을 사용하여 여러 행을 검색하고 그 결과를 하나로 병합합니다. 이 액세스 방법은 단일 테이블의 인덱스 스캔만 결합하고 여러 테이블을 스캔하지 않습니다. 병합은 기본 스캔의 Union, Cross 또는 Cross-Union을 생성할 수 있습니다.

SELECT * FROM tbl_name WHERE key1 = 10 OR key2 = 20;

SELECT * FROM tbl_name
WHERE (key1 = 10 OR key2 = 20) AND non_key = 30;

SELECT * FROM t1, t2
WHERE (t1.key1 IN (1,2) OR t1.key2 LIKE 'value%')
AND t2.key1 = t1.some_col;

SELECT * FROM t1, t2
WHERE t1.key1 = 1
AND (t2.key1 = t1.some_col OR t2.key2 = t1.some_col2);

unique_subquery

이 유형은 일부 IN 하위 쿼리를 다음 형식의 eq_ref로 대체합니다.

value IN (SELECT primary_key FROM single_table WHERE some_expr)

index_subquery 이 조인 유형은 Unique_subquery와 유사합니다. IN 하위 쿼리를 대체하지만 다음 형식의 하위 쿼리에서 고유하지 않은 인덱스와 함께 작동합니다.

value IN (SELECT key_column FROM single_table WHERE some_expr)

range 인덱스를 사용하여 행을 선택하여 지정된 범위 내의 행만 검색합니다. 출력 행의 키 열은 사용할 인덱스를 나타냅니다. 가장 오랫동안 사용된 키 부분을 포함하는 key_len을 포함합니다. 참조 열 NULL이 이 유형에 적합합니다.
범위는 키 열을 상수 =, , >, >=, , BETWEEN, LIKE 또는 IN과 비교할 때 사용할 수 있습니다. () 연산자:

index
인덱스 조인 유형은 인덱스 트리를 스캔한다는 점을 제외하면 ALL과 동일합니다. 두 가지 상황이 있습니다:

1. 인덱스 트리는 인덱스가 쿼리에 대한 포함 인덱스이고 테이블에 필요한 모든 데이터를 충족하는 데 사용될 수 있는 경우에만 스캔됩니다. 이 경우 추가 열에는 인덱스 사용이 표시됩니다. 인덱스 전용 스캔은 일반적으로 테이블 데이터보다 크기가 작은 모든 인덱스보다 빠릅니다.

2. 인덱스에서 읽기를 사용하여 전체 테이블 스캔을 수행하여 인덱스 순서로 데이터 행을 찾습니다. 추가 열에는 색인 사용이 표시되지 않습니다. MySQL은 쿼리가 단일 인덱스에 속한 열만 사용할 때 이 연결 유형을 사용할 수 있습니다.

ALL
이전 테이블의 각 행 조합에 대해 전체 테이블 스캔을 수행합니다. 일반적으로 테이블이 const로 표시되지 않은 첫 번째 테이블이면 좋지 않으며 다른 모든 경우에는 일반적으로 매우 나쁩니다. 일반적으로 이전 테이블의 상수 값 또는 열 값을 기반으로 테이블에서 행 검색을 활성화하는 인덱스를 추가하면 이 문제를 모두 피할 수 있습니다.

가능한_키 열은 MySQL이 행을 찾기 위해 선택할 수 있는 인덱스를 나타냅니다. 이 테이블은 MySQL이 테이블에서 레코드를 찾는 데 사용할 수 있는 인덱스를 나타냅니다. 쿼리와 관련된 필드에 인덱스가 있으면 해당 인덱스가 나열되지만

#🎜 🎜# 이 열은 EXPLAIN 출력에 표시된 테이블 순서와 완전히 독립적입니다. 이는 available_keys의 일부 키가 생성된 테이블 순서에 실제로 사용될 수 없음을 의미합니다. 컬럼이 NULL이면 연관된 인덱스가 없습니다. 이 경우 WHERE 절을 확인하여 인덱싱에 적합한 특정 열을 참조하는지 확인하여 쿼리 성능을 향상시킬 수 있습니다. 그렇다면 적절한 인덱스를 생성하고 EXPLAIN Key(index)

로 쿼리를 다시 확인합니다. 인덱스를 선택하지 않으면 키는 NULL입니다. MySQL이 available_keys 열의 인덱스를 사용하거나 무시하도록 하려면 쿼리에서 FORCE INDEX, USE INDEX 또는 IGNORE INDEX를 사용하십시오.

7.key_len

은 쿼리에 사용된 인덱스의 길이를 다음을 통해 계산할 수 있습니다. 이 열(key_len 표시된 값은 사용된 실제 길이가 아닌 인덱스 필드의 가능한 최대 길이입니다. 즉, key_len은 테이블에서 검색되지 않고 테이블 정의에 따라 계산됩니다.) 없음 정확도 손실, 길이가 짧을수록 좋음

8. ref

은 위 표의 연결 매칭 조건, 즉 , 인덱스를 찾는 데 사용되는 열 또는 상수

열의 값 9.row

은 MySQL이 찾을 위치를 추정함을 나타냅니다. 테이블 통계 및 인덱스 선택을 기반으로 하는 필수 레코드입니다. 읽을 행 수

10. Extra

추가 열 EXPLAIN 출력에는 다음이 포함됩니다. 쿼리를 해결하기 위한 MySQL에 대한 추가 정보입니다. 다음 목록에서는 이 열에 가능한 값을 설명합니다. 또한 각 항목은 추가 값을 표시하는 속성을 JSON 형식 출력에 나타냅니다. 그들 중 일부에는 특정 속성이 있습니다. 메시지 속성으로 표시되는 기타 텍스트

11. partitions (extension)

쿼리와 일치하는 파티션을 기록합니다. 이 열은 PARTITIONS 키워드를 사용할 때만 표시됩니다. 분할되지 않은 테이블에는 null이 표시됩니다

MySQL에 대한 자세한 내용은 PHP 중국어 웹사이트의 MySQL 튜토리얼 열을 참조하세요. ! !

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

성명
이 기사는 segmentfault에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
MySQL은 다른 RDBM에 비해 동시성을 어떻게 처리합니까?MySQL은 다른 RDBM에 비해 동시성을 어떻게 처리합니까?Apr 29, 2025 am 12:44 AM

mysqlhandlesconcurrencyusingamixofrow-reveltable-levellocking, 주로 throughinnodb'srow-levellocking.comparedtootherrdbms, mysql 's trofficefice formanyusecasesbutmayfacechallengeswithdeadlocksandlacksadvancturespostpostgresql'sserializa

MySQL은 다른 관계형 데이터베이스에 비해 트랜잭션을 어떻게 처리합니까?MySQL은 다른 관계형 데이터베이스에 비해 트랜잭션을 어떻게 처리합니까?Apr 29, 2025 am 12:37 AM

mysqlhandlestransactionseffectialthicatied theinnodbengine, support-propertiessimilartopostgresqlandoracle.1) mysqlusesepeatablereadasthedefaultisolationlevel, itpoptormizestperformance와 함께

MySQL에서 사용 가능한 데이터 유형은 무엇입니까?MySQL에서 사용 가능한 데이터 유형은 무엇입니까?Apr 29, 2025 am 12:28 AM

MySQL 데이터 유형은 숫자, 날짜 및 시간, 문자열, 이진 및 공간 유형으로 나뉩니다. 올바른 유형을 선택하면 데이터베이스 성능 및 데이터 스토리지를 최적화 할 수 있습니다.

MySQL에서 효율적인 SQL 쿼리를 작성하기위한 모범 사례는 무엇입니까?MySQL에서 효율적인 SQL 쿼리를 작성하기위한 모범 사례는 무엇입니까?Apr 29, 2025 am 12:24 AM

모범 사례에는 다음이 포함됩니다. 1) 데이터 구조 및 MySQL 처리 방법 이해, 2) 적절한 인덱싱, 3) 선택을 피하십시오*, 4) 적절한 결합 유형 사용, 5)주의와 함께 하위 쿼리 사용, 6) 설명과 함께 쿼리 분석, 7) 서버 리소스에 대한 쿼리의 영향을 고려하십시오. 8) 데이터베이스를 정기적으로 유지하십시오. 이러한 관행은 MySQL 쿼리를 빠르게 만들뿐만 아니라 유지 보수, 확장 성 및 자원 효율성을 만들 수 있습니다.

MySQL은 PostgreSQL과 어떻게 다릅니 까?MySQL은 PostgreSQL과 어떻게 다릅니 까?Apr 29, 2025 am 12:23 AM

mysqlisbetterforspeedandsimplicity, 적절한 위장; postgresqlexcelsincmoMplexDatascenarioswithrobustFeat.MySqlisIdeAlforQuickProjectSandread-Heavytasks, whilepostgresqlisprefferredforapticationstrictaintetaintegritytetegritytetetaintetaintetaintegritytetaintegritytetaintegritytetainte

MySQL은 데이터 복제를 어떻게 처리합니까?MySQL은 데이터 복제를 어떻게 처리합니까?Apr 28, 2025 am 12:25 AM

MySQL은 비동기식, 반 동시성 및 그룹 복제의 세 가지 모드를 통해 데이터 복제를 처리합니다. 1) 비동기 복제 성능은 높지만 데이터가 손실 될 수 있습니다. 2) 반 동기화 복제는 데이터 보안을 향상 시키지만 대기 시간을 증가시킵니다. 3) 그룹 복제는 고 가용성 요구 사항에 적합한 다중 마스터 복제 및 장애 조치를 지원합니다.

설명 명세서를 사용하여 쿼리 성능을 분석 할 수있는 방법은 무엇입니까?설명 명세서를 사용하여 쿼리 성능을 분석 할 수있는 방법은 무엇입니까?Apr 28, 2025 am 12:24 AM

설명 설명은 SQL 쿼리 성능을 분석하고 개선하는 데 사용될 수 있습니다. 1. 쿼리 계획을 보려면 설명 명세서를 실행하십시오. 2. 출력 결과를 분석하고 액세스 유형, 인덱스 사용량 및 조인 순서에주의를 기울이십시오. 3. 분석 결과를 기반으로 인덱스 생성 또는 조정, 조인 작업을 최적화하며 전체 테이블 스캔을 피하여 쿼리 효율성을 향상시킵니다.

MySQL 데이터베이스를 어떻게 백업하고 복원합니까?MySQL 데이터베이스를 어떻게 백업하고 복원합니까?Apr 28, 2025 am 12:23 AM

논리 백업에 mysqldump를 사용하고 핫 백업을 위해 mysqlenterprisebackup을 사용하는 것은 mySQL 데이터베이스를 백업하는 효과적인 방법입니다. 1. MySQLDUMP를 사용하여 데이터베이스를 백업합니다 : MySQLDUMP-UROOT-PMYDATABASE> MYDATABASE_BACKUP.SQL. 2. Hot Backup : MySQLBackup- 사용자 = root-password = password-- backup-dir =/path/to/backupbackup에 mysqlenterprisebackup을 사용하십시오. 회복 할 때 해당 수명을 사용하십시오

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!

SublimeText3 Linux 새 버전

SublimeText3 Linux 새 버전

SublimeText3 Linux 최신 버전

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기