10장은 1,2,3의 하위 내용이 존재하는데
실행계획(1)에서는 1,2에 해당하는 통계 정보, 실행 계획 확인을 살펴 보았고
이번에는 3에 해당하는 실행 계획 분석을 살펴보자.
실행 계획 분석
실행 계획의 출력 내용을 통해서
- 어떤 접근 방법을 사용해서
- 어떤 최적화를 수행하는지 그리고
- 어떤 인덱스를 사용하는지 등을 이해해야한다.
실행 계획 결과의
각 라인(레코드)은 쿼리 문장에서 사용된 테이블의 개수만큼 출력
실행 순서는 위에서 아래로 순서대로 표시된다.
이제 실행 계획에 표시되는 각 칼럼의 의미와 값은 어떤것이 있는지 살펴보자.
- id 칼럼
- 단위 select 쿼리별로 부여되는 식별자 값
- 하나의 select 문장 안에서 여러 개의 테이블을 조인하면 조인되는 테이블의 개수만큼 레코드가 출력되지만 id 값은 같다
- select_type 칼럼
- 단위 select 쿼리가 어떤 타입의 쿼리인지 표시되는 칼럼
- simple : union이나 서브쿼리를 사용하지 않은 단순한 select 쿼리
- primary : union이나 서브쿼리를 가지는 select 쿼리의 가장 바깥쪽에 있는 쿼리
- union : union으로 결합하는 단위 select 쿼리 가운데 첫 번째를 제외한 두 번째 이후 단위 select 쿼리 , 첫 번째는 derived
- .. 다양한데 생략.. 추후 궁금하면 찾아보도록
- table 칼럼
- dual 과 같은 내용은 NULL로 표시된다
- <derived N>, <union M,N>과 같이 <>로 둘러싸인 이름이 명시되는 경우도 존재 -> 임시 테이블을 의미
- partitions 칼럼
- type 칼럼
- 어떤 방식으로 레코드를 읽었는지를 나타낸다
- const : 프라이머리 키나 유니크 키 칼럼을 이용해서 where 조건절을 가지고 있으며 반드시 1건을 반환
- eq_ref : 여러 테이블이 조인되는 쿼리의 실행 계획에 포함,
조인에서 두 번째 이후에 읽는 테이블에서 반드시 1건만 존재하는 경우
- ref : 인덱스의 종류와 관계없이 동등 조건으로 검색할 때 접근 방법
- range : 인덱스 레인지 스캔 형태의 접근 방법
- index : 인덱스를 처음부터 끝까지 읽는 인덱스 풀 스캔
- ALL : 풀 테이블 스캔