인프런 커뮤니티 질문&답변

bada.kang님의 프로필 이미지
bada.kang

작성한 질문수

Real MySQL 시즌 1 - Part 1

Ep.01 CHAR vs VARCHAR

EXPLAIN ANALYZE 수행 시 쿼리 실행 계획이 예상과 다릅니다.

해결된 질문

작성

·

86

0

먼저 강의 내용이 아닌 책내용을 질문하게 되서 죄송합니다. 하지만 여기 말고 질문할 곳이 마땅치 않아 부득이하게 이곳에 적게 되었습니다. 부디 사정을 봐주시길 부탁드립니다.

 

Real MySQL 1권의 10.2 실행 계획 확인(415pg)에서는 EXPLAIN ANALYZE 실행 시 나타나는 결과에서는 다음과 같은 규칙이 적용된다고 설명되어 있습니다.

 

  1. 들여쓰기가 같은 레벨에서는 상단에 위치한 라인이 먼저 실행

  2. 들여쓰기가 다른 레벨에서는 가장 안쪽에 위치한 라인이 먼저 실행

 

이 말대로라면 아래 그림에서의 실행순서는

F, D, E, C, B, A 가 됩니다.

 

하지만 책에서는 실행순서가 D, F, E, C, B, A 로 된다고 적혀있습니다.

 

들여쓰기가 다른 레벨에서는 가장 안쪽에 위치한 라인이 먼저 실행된다고 하여 F 가 가장 먼저 실행될 줄 알았는데 D 부터 시작된다고 적혀있어서 혼동이 왔습니다. 혹시 왜 D 부터 시작하는지 설명을 부탁드릴 수 있을까요?

감사합니다.

 

image.png

 

답변 1

1

이성욱님의 프로필 이미지
이성욱
지식공유자

bada.kang님 안녕하세요.

 

네, 말씀하신 내용이 맞습니다.

하지만 책에서 소개하고 있는 내용은 대략적으로 쿼리의 실행 순서를 이해할 때의 규칙 정도로 이해해주시면 좋을 것 같아요. 실제로는 쿼리의 모양과 실행 특성들을 조금씩 같이 Mix해서 실행 계획을 읽어야 정확한 순서를 확인할 수 있습니다.

 

책의 쿼리에서 D 작업은 독립적으로 실행(조인의 드라이빙 테이블 읽기)될 수 있는 작업이지만, F 작업(조인의 드리븐 테이블 읽기)은 후속으로 실행되는 작업입니다. 그래서 들여쓰기가 더 깊이 들어간 것은 F 작업이지만, D가 먼저 실행되는 구조인 것입니다.

 

그렇다고 해서, 들여쓰기가 많이 들어간 작업이 먼저 실행되는 작업이라고 단정지을수도 없습니다. 이 실행 계획의 바로 위에 보시면 D~F 작업이 완료되어야, 비로소 상위에 있는 B (그룹핑 작업) 작업이 실행되기 때문입니다. 사실 실행 계획의 들여쓰기는 작업의 묶음 개념 의미가 크기 때문에 ... 들여쓰기만으로 쿼리의 실행 순서를 단정하기에는 한계가 있긴 한 것입니다.

 

다음 인쇄판에서는 조금 더 이해도를 높이기 위해서,

여기에서 말씀드린 부분까지 같이 포함하도록 책 내용을 보완해보겠습니다.

 

감사합니다.

bada.kang님의 프로필 이미지
bada.kang

작성한 질문수

질문하기