쿼리 튜닝 및 최적화시 사용하는 explain에 대해 복습해보려 한다. DB는 mysql/mariadb 기준이다.
- 실행할 쿼리 앞에 EXPLAIN
키워드를 붙이면 각 단계별 실행 계획 결과가 출력된다.
EXPLAIN Format = JSON
을 추가하면 cost 등 더 자세한 정보를 알 수 있다.
주요 키워드들을 나열해본다.
table
어떤 테이블에 대한 접근을 표시하고 있는지
id
select에 붙은 번호, 보통 join을 하나의 단위로 실행하기 때문에 id는 그 쿼리 실행 단위를 식별하는 것이다. 따라서 조인만 수행하는 쿼리에서는 id는 항상 1이다.
partitions
파티셔닝이 되어 있는 경우에 사용되는 필드이다. 파티셔닝 안되어 있는 경우엔 NULL
type
접근방식을 표시하는 필드로 테이블에서 어떻게 row 데이터를 가져올 것인가를 가리킨다. ALL, eq_ref, ref
가 있는데 ALL, eq_ref
는 조인시 pk나 uk를 사용하여 하나의 값으로 접근, ref
는 여러 개의 행을 패치할 가능성이 있는 접근을 의미한다. 접근 방식은 대상 테이블로의 접근이 효율적일지 여부를 판단하는데 아주 중요하다. ALL(전체 행 스캔) 이외의 접근 방식은 모두 인덱스를 사용한다.
rows
이 접근방식으로 몇 행을 가져왔는가를 표시. 어디까지나 통계값으로 계산한 값이므로 실제 행 수와 반드시 일치하지 않는다.
extra
Extra 필드는 옵티마이저가 동작하는데 대해서 우리에게 알려주는 힌트. 이 필드는 옵티마이저의 행동을 파악할때 아주 중요하다.
'develop > etc' 카테고리의 다른 글
udemy 클린코드 강의 정리 (0) | 2022.08.09 |
---|---|
gRPC (0) | 2022.07.21 |
REST API (0) | 2022.07.09 |
[vscode] java language server requires a JDK 11+ to launch itself (0) | 2022.02.14 |
개발자 포트폴리오 잘 만들기 (0) | 2021.11.03 |