MySQL Explain 이란?
MySQL 공식 홈페이지는 다음과 같이 설명을 한다.
The [EXPLAIN] statement provides information about how MySQL executes statements. [EXPLAIN] works with [SELECT], [DELETE], [INSERT], [REPLACE], and [UPDATE] statements.
출처: MySQL :: MySQL 8.0 Reference Manual :: 8.8.2 EXPLAIN Output Format
즉 SQL Query문이 어떻게 실행되는지에 정보를 제공한다는 것인데, 직접 써보기 전까지는 감이 잘 오질 않을 수 있다.
왜쓰는 건가?
이 기능을 사용하는 첫 번째 이유는 쿼리문의 성능을 파악하기 위해서다. 보통 HTTP 통신 API 개발을 할 때, 쿼리 문을 작성하는 일이 많다. 이때 쿼리문 복잡해질 수록, 데이터가 많아져도 괜찮을까라는 의문이 들었다. 물론, 성능 테스트를 해보는게 가장 확실하겠지만, 이는 새로운 프로젝트를 할 때, 데이터의 양이 충분치 않기에 성능 테스트를 해보는 것도 시간 소요가 꽤 들 수 있다. 이때 유용하게 사용해볼 수 있는 기능이 EXPLAIN 이라고 할 수 있다.
EXPLAIN 은 쿼리문 사용법이 간단하고, 어떻게 동작하고 있는지 한눈에 파악할 수 있어 내가 소기에 이루고자 했던 목적을 빠르게 달성할 수 있었다. 빠른 시간 내에 쿼리문의 속성을 파악하고 싶다면 이 기능을 추천하고 싶다.
그럼 Explain은 어떻게 사용하는가?
실제 적용 해보는 것은 매우 간단하다. MySQL 콘솔 창에서 테스트하고자하는 쿼리문을 작성하고 쿼리문 앞에 아래와 같이 EXPLAIN 키워드를 붙여주면 된다.
EXPLAIN SELECT * FROM user where name = "Jonh";
아래와 같은 컬럼과 각 항목들이 나오게 된다.
id | select_type | table | partitions | type | possible_keys | key | key_len | ref | ..... |
여기서 쿼리문의 성능을 파악하려면 'type'이라는 컬럼을 주목해야 한다. 타입에서 나온 결과에 따라 SQL 문의 성능의 차이를 말해주고 있기 때문이다. 각 type Value에 대한 설명은 아래 사이트에 자세하게 나와 있기 때문에, 굳이 부가적인 설명은 하지 않겠다.
결론
Explain 기능은 개발 생산 보다는, 쿼리문 테스트 팁이라고 할 수 있다. 그럼에도 불구하고 위의 내용을 공유하는 것은, 이 기능을 알고 내가 작성한 쿼리문이 어떤 퍼포먼스를 내고 어떻게 실행이 되는지를 조금 더 확실하게 알고 가게 되었기 때문이다. 예를 들어, 인덱스를 사용하면 막연하게 읽기 속도가 더 빨라질 것이라고 생각했지만, 실제로 이 기능을 통해 인덱스 설정에 따라 쿼리문 실행이 어떻게 바뀌는지 한눈에 파악할 수 있어 쿼리문 작성 시, 좋은 참고 정보가 되었다.
위 글은 '개발작당'이라는 오프라인 개발 커뮤니티에서 발표한 내용으로 작성하였습니다.
'개발이야기' 카테고리의 다른 글
Cognito 에서 Nickname 중복 체크하기 (0) | 2019.07.13 |
---|---|
7개월차 개발자의 이야기 (0) | 2019.07.13 |
Zbar , OpenCV 사용해서 QR코드 인식하기 (0) | 2019.07.12 |
디자이너가 없는 회사에서 디자인 작업을 하는 방법. (0) | 2019.07.12 |
생체로그인의 표준인 FIDO2.0 소개 (0) | 2019.07.12 |