원티드에서 프리온보딩 백엔드 mysql 강의를 듣다가, explain을 사용하는 걸보고 6개월 동안 왜 한번도 이걸 사용하지않았을까 싶어 정리해볼려고합니다.
EXPLAIN은 MySQL 해당 쿼리를 실행할 때, 실행계획이 무엇인지 알고 싶을때 사용한는 명령어 입니다. 실행계획을 통해 볼수 있으니 쿼리 최적화를 할 수 있습니다.
heidSQL에서 EXPLAIN을 사용했을시 아래와 같이 표가 나옵니다.
id
: 행이 어떤 SELECT구문을 나타내는지 알려주는 번호로, 쿼리 구분에 서브쿼리나 UNION이 없다면 SELECT는 하나 밖에 없기 때문에 수행되는 실행단위는 1개가 되고 모든 행에 1이라는 id값이 부여됩니다. 이외에는 원 구문 순서에 따라 SELECT 문들에 순차적으로 번호가 부여됩니다.
select_type
:
table
: 테이블 명을 의미합니다.
partitions
: 파티셔닝이 되어있는 경우에 사용되는 필드입니다.
type
: 테이블에서 어떻게 행 데이터를 가지고 올 것인가 접근 방식을 표시하는 필드입니다.
possible_keys
: 쿼리에서 접근하는 컬럼들과 사용된 비교 연산자들을 바탕으로 어떤 인덱스를 사용할 수 있는지 표시해주는 필드입니다.
key
: key필드는 possible_keys 필드에 값이 있다면 실제로 옵티마이저가 최적화 검색에 사용한 인덱스가 표시되는 필드입니다
key_len
: 선택된 인덱스의 길이를 의미합니다.
ref
: key 컬럼에서 나와있는 인덱스에서 값을 찾기 위해 선행 테이블의 어떤 컬럼이 비교되었는지를 나타냅니다
rows
: 결과 산출에 있어서 접근되는 행의 예측값입니다. 조인이나 서브 쿼리 최적화에 있어 중요한 항목이 됩니다.
Extra
: 옵티마이저가 동작하는 방식에 대한 부가적인 정보를 보여줍니다.