ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Real MySQL [6-5] 실행계획 - EXPLAIN EXTENDED, PARTITIONS
    MySQL 2016. 12. 13. 20:12



    본 게시물의 내용과 이미지는 도서 Real MySQL의 내용을 재구성하여 작성되었습니다. 저자, 출판사에 의해 저작권 문제 발생시 게시물이 비공개 될 수 있음을 알립니다. 


    EXPLAIN EXTENDED(Filtered 칼럼)


    스토리지 엔진에서 최종적으로 사용자에게 전달되는 레코드를 MySQL에서 필터링 한다. 이 과정에서 버려지는 레코드가 발생할 수 있는데 필터링이 얼마나 효율적으로 실행됬는지를 Filtered 칼럼으로 알 수 있다. 실행계획에서 Filtered 칼럼을 함께 조회하려면 EXPLAIN 명령 뒤에  "EXTENDED"라는 키워드를 지정하면 된다. "EXTENDED" 키워드가 사용된 실행 계획 예제를 살펴보자.


    EXPLAIN EXTENDED

    SELECT * FROM employees

    WHERE emp_no BETWEEN 10001 AND 10100 AND gender='F';




    실행계획의 rows 칼럼 뒤에 Filtered 라는 새로운 칼럼 값이 표시된다.


    Filtered 칼럼에는 MySQL 엔진에 의해 필터링되어 제거된 레코드를 제외하고 최종적으로 남은 레코드의 비율(%)이 표시된다. rows 칼럼이 100건이고 filtered 칼럼의 값이 20%이므로, 스토리지 엔진이 전체 100건의 레코드를 읽어서 20%만 남았다는 것을 의미한다. 필터링 되고 20건만 남았다는 의미이다. 출력되는 filtered 컬럼의 정보 는 실제값이 아닌 통계 정보로부터 예측된 값이다. 






    EXPLAIN EXTENDED(추가 옵티마이저 정보)


    쿼리 실행계획을 위한 파스 트리를 생성하는데 EXPLAIN EXTENDED 의 기능 중 파스 트리를 재조합해서 쿼리 문장과 비슷한 순서대로 나열해서 보여주는 기능이 있다.


    EXPLAIN EXTENDED

    SELECT e.first_name

        (SELECT COUNT(*) FROM dept_emp de, dept_manager dm WHERE dm.dept_no=de.dept_no) AS cnt

    FROM employees e

    WHERE e.emp_no=10001;


    EXTENDED 명령을 실행해 실행 계획이 출력된 직후, SHOW WARNINGS 명령을 실행하면 옵티마이저가 분석해서 다시 재조합한 쿼리 문장을 다음과 같이 확인할 수 있다.


    mysql> SHOW WARNING;

    SELECT 'Georgi' AS 'first_name',

    (SELECT COUNT(0)

    FROM 'employees'.'dept_emp' 'de'

    JOIN 'employees'.'dept_manager' 'dm' 

    WHERE ('employees'.'de'.'dept_no' = 'employees'.'dm'.'dept_no')) AS 'cnt'

    FROM 'employees'.'employees' 'e' where 1


    SHOW WARNING 으로 출력된 내용은 표준 SQL 문장이 아니다. 옵티마이저가 쿼리를 어떻게 해석했고, 어떻게 쿼리를 변환했으며, 어떠한 특수한 처리가 됐는지 판단할 수 있다.




    EXPLAIN PARTITIONS(Partitions 칼럼)


    EXPLAIN PARTITIONS 옵션을 사용하면 테이블의 파티션중 어떤 파티션을 사용했는지 등의 정보를 조회할 수 있다. 



    EXPLAIN PARTITIONS

    SELECT * FROM tb_partition

    WHERE reg_Date BETWEEN '2010-01-01' AND '2010-12-30';


    위 예제는 reg_Date 칼럼의 값을 이용해 년도별로 구분된 파티션 4개를 가진다. EXPLAIN PARTITIONS 명령으로 출력된 실행계획에는 partitions라는 새로운 칼럼을 포함해서 표시한다. 




    EXPLAIN PARTITIONS 명령은 파티션 테이블에 실행되는 쿼리가 얼마나 파티션 기능을 잘 확용하고 있는지 판단할 수 있는 자료를 제공한다. EXPLAIN 명령에서는 EXTENDED 와 PARTITIONS 옵션을 함께 사용할 수 없다. 





Designed by Tistory.