본문 바로가기
  • keep calm and carry on
[ MariaDB ]

[ mariaDB ] 실행계획 #2, id칼럼

by geekseong 2019. 12. 8.

EXPLAIN() 명령어의 결과에서 id 칼럼의 숫자가 의미하는 것은 작성한 쿼리의 SELECT문의 갯수를 뜻합니다.


예를 들어보겠습니다.

 

[ 쿼리 ]

EXPLAIN ( 
    SELECT *
    FROM `employees`.`employees`
    WHERE emp_no = 10032
);

 

[ 결과 ]

id값이 1입니다. 그 이유는 EXPLAIN 안에 있는 쿼리의 SELECT 의 갯수가 1개이기 때문입니다.


다음 예제를 살펴보겠습니다.

 

[ 쿼리 ]

EXPLAIN ( 
    SELECT *
    FROM `employees`.`employees`
    WHERE emp_no = (
        SELECT emp_no
        FROM `employees`.`salaries`
        WHERE `salary` = 158220
    )
);

[ 결과 ]

( id 칼럼만 보겠습니다. )

쿼리 id값이 1과2 2개입니다. 그 이유는 SELECT가 2개가 쓰였기 때문입니다. SELECT가3개, 4개, N개 일때도 같은 규칙이 적용되어 SELECT당 1씩 증가된 고유한 값을 가지게 됩니다. 따라서 id에서 얻을 수 있는 정보는 '이 쿼리에서 몇번의 SELECT 구문이 사용되었는가' 입니다. 

 

여기서 한가지 잘못 생각 할 여지가 있는 부분이 있습니다. SELECT 문 당 1개씩 증가된 값을 가지기 때문에 SELECT 문이 2개가 쓰였으면 첫번째 row의 id값은 1, 두 번째 id 값은 2가 되는것이 아니냐 하는것입니다. 

결론부터 말하면 id 의 부여되는 값과 row 의 갯수와는 관계가 없습니다.

 

여기서 id의 값과 row의 갯수가 다른 예를 보여드리겠습니다.

 

[ 쿼리 ]

EXPLAIN ( 
    SELECT *
    FROM `employees`.`employees` AS EMP 
    INNER JOIN `employees`.`dept_emp` AS DP_EMP
    ON EMP.`emp_no` = DP_EMP.`emp_no`
);

 

[ 결과 ]

쿼리에서 사용된 SELECT 문은 1개이기 때문에 id 값은 1이지만 row 의 갯수는 2개입니다. 그 이유는 table 칼럼과 관계가 있습니다. table 칼럼은 'SELECT구문에서 사용된 테이블'을 나타냅니다. 하나의 쿼리에서 조인을 사용하여 2개의 테이블( employees, dept_emp ) 를 사용하여 2개의 row가 생겼지만, 같은 SELECT 문에서 사용된 테이블이기 때문에 두 row에 같은 id값(1)이 부여가 된것입니다. id는 SELECT문, row의 갯수는 테이블의 갯수라고 생각하시면 됩니다.

 

그리고 id 값이 부여되지 않는 경우또한 존재합니다.

만약 UNION, UNION ALL를 이용하여 만들어진 결과 테이블의 경우 id 값이 부여가 되지 않습니다.

이 부분은 다음 select_type 칼럼과 연계하여 설명해 드리도록 하겠습니다.

'[ MariaDB ]' 카테고리의 다른 글

[ mariaDB ] 실행계획 분석 #1, EXPLAIN  (0) 2019.12.08
DDL(Data Definition Language)  (0) 2018.09.15
SQL 이란?  (0) 2018.09.15

댓글