728x90
- 참고: https://jeong0427.tistory.com/43
- 실행 계획 확인
- 8.0 버전부터는 explain 명령에 사용할 수 있는 새로운 옵션이 추가됐다.
- 쿼리의 실행 시간 확인
- explin analyze
- 실행 계획 분석
- id 칼럼
- 하나의 select 문장은 다시 1개 이상의 sub select 문장을 포함할 수 있다.
- 여러개의 테이블이 조인되는 경우에는 id 값이 증가하지 않고 같은 id 값이 부여된다.
- id 칼럼이 테이블의 접근 순서를 의미하지는 않는다.
- explain format=tree 명령으로 확인해보면 순서를 더 정확히 알 수 있다.
- select_type 칼럼
- select 쿼리가 어떤 타입의 쿼리인지 표시되는 칼럼이다.
- simple
- union 이나 서브쿼리를 사용하지 않는 단순한 select 쿼리
- 쿼리 문장이 아무리 복잡하더라도 실행 계획에서 simple 단위 쿼리는 하나만 존재한다.일반적으로 제일 바깥 sleect 쿼리의 select_type이 simple로 표시된다.
- primary
- union 이나 서브쿼리를 가지는 select 쿼리의 실행 계획에서 가장 바깥쪽에 있는 단위 쿼리는 select_type이 primary로 표시된다.
- simple 과 마찬가지로 단위 쿼리는 하나만 존재하며 쿼리의 바깥쪽에 있는 select 단위 쿼리가 primary로 표시된다.
- union
- union 으로 결합하는 단위 select 쿼리 가운데 첫 번째를 제외한 두 번째 이후 단위 select 쿼리는 union 으로 표시된다.
- union all 의 첫 번째 쿼리는 derived 라는 select_type 을 가진다.
- dependent union
- union 이나 union all로 결합된 단위 쿼리가 외부 쿼리에 의해 영향을 받는 것을 의미
- union result
- union 결과를 담아두는 테이블을 의미한다.
- 8.0 이전 버전에는 union all 이나 union 쿼리는 모두 임시 테이블을 생성했는데 8.0 부터는 union all 의 경우 임시 테이블을 사용하지 않도록 기능이 개선됐다.
- 하지만 union(또는 union distinct)은 mysql 8.0 버전에서도 여전히 임시 테이블에 결과를 버퍼링 한다.
- union result 는 실제 쿼리에서 단위 쿼리가 아니기 때문에 별도의 id 값은 부여되지 않는다.
- subquery
- select_type 의 subquery는 from 절 이외에서 사용되는 서브쿼리만을 의미한다.
- dependent subquery
- 서브쿼리가 바깥쪽(Outer) select 쿼리에서 정의된 칼럼을 사용하는 경우, select_type에 dependent subquery 라고 표시된다.
- derived
- dependent derived
- uncacheable subquery
- uncacheable union
- materialized
- simple
- table 칼럼
- mysql 서버의 실행 계획은 단위 select 쿼리 기준이 아니라 테이블 기준으로 표시된다.
- partition 칼럼
- type 칼럼
- posiible_keys 칼럼
- 사용될법했던 인덱스의 목록(선택 가능한 인덱스)
- key 칼럼
- 실제 사용한 인덱스를 의미
- key_len 칼럼
- 인덱스의 각 레코드에서 몇 바이트까지 사용했는지 알려주는 값
- ref 칼럼
- 참조 조건으로 어떤 값이 제공됐는지 보여준다.
- 상숫값을 지정했다면 ref 칼럼의 값은 const로 표시되고, 다른 테이블의 칼럼값으면 칼럼명으로 표시된다.
- rows 칼럼
- 각 처리 방식이 얼마나 많은 레코드를 읽고 비교해야 하는지 예측해서 비용을 산정한다.
- 실행 계획의 효율성을 판단을 위해 예측했던 레코드 건수를 보여준다.
- filtered 칼럼
- 조건절에 맞게 필터링된 행 수의 비율
- extra 칼럼
- 추가 정보 (옵티마이저가 실행 계획을 만드는 과정에서 고려한 다른 요인들)
- const row not found
- const 접근 방법으로 테이블을 읽었지만 실제로 해당 테이블에 레코드가 1건도 존재하지 않을때 나타난다.
- Deleting all rows
- where 조건절이 없는 delete 문장의 실행 계획에서 자주 표시되며, 이 문구는 테이블의 모든 레코드를 삭제하는 핸들러 기능(api)을 한번 호출함으로써 처리됐다는 것을 의미한다.
- Distint
- 중복 없이 유니크하게 가져오기 위한 쿼리다.
- distint를 처리하기위해 조인하지 않아도 되는 항목은 모두 무시하고 꼭 필요한 것만 조인했으며, 꼭 필요한 레코드만 읽었다는것을 표현한다.
- ..
- 종류가 너무 많고 지금 다 알 필요가 없어 위 상단의 url을 참고하거나, 필요시 책을 살펴봐야 할듯하다.
- select 쿼리가 어떤 타입의 쿼리인지 표시되는 칼럼이다.
- id 칼럼
728x90
'공부 > Mysql' 카테고리의 다른 글
[RealMysql 8.0] 고급 최적화 9.3 ~ 9.4.12 (0) | 2023.02.27 |
---|---|
[RealMysql 8.0] 옵티마지어와 힌트 9 ~ 9.2 (0) | 2023.02.26 |
[RealMysql 8.0] 외래키 8.10 ~ 8.10.2 (0) | 2023.02.26 |
[RealMysql 8.0] 인덱스 8.3.5 ~ 8.9.2 (0) | 2023.02.07 |
[RealMysql 8.0] 인덱스 8.3.4 ~ 8.3.4.4 (0) | 2023.02.07 |
댓글