EXPLAIN
is used to obtain a query execution plan
(that is, an explanation of how MySQL would execute a query).
(출처_ MySQL)
EXPLAIN은 쿼리 실행에 대한 계획을 알고 싶을 때 사용합니다.
우와 삽잡이~~ 영어좀 하는데~~~
하하하... 혼자놀기...
어떻게 DB가 실행될지
즉, 어떻게 Data를 가져올지에 대한
실행 계획을 확인할 수 있다는 것입니다.
MySQL에서는 쿼리 옵티마이저(Optimizer)를 통해
빠르고 효율적으로 수행할 Query를 만들기 위해 최적화 작업을 시행합니다.
이에 잘 구조화 된 SQL Query를 작성하여
Query문 변경 없이 잘! 사용하면
DBMS의 내부 엔진에 있는 옵티마이저가
처리 경로를 캐싱하여 최적화 된 과정으로 실행시켜줍니다.
(출처_ ORACLE)
Oracle 사이트에서 가져왔지만,
그림으로 잘 설명해주고 있네요!
사용법은 간단합니다.
SELECT 문 앞에 EXPLAIN 키워드를 붙여주면 됩니다.
1 | EXPAIN SELECT test_idx, test_name, test_url, success, total, fail FROM test_table | cs |
그러면, SELECT가 어떻게 실행될지에 대한 처리 방법을 보여줍니다.
'index를 타는가 확인해보라' 이런 말을 듣게 되신다면,
이는 테이블의 어느 곳에 index를 추가하면
열을 더 빨리 찾게 되는지 알고
Query문을 작성하는데 참고할 수 있을 것입니다.
위의 EXPLAIN을 통해 얻은 값을 쪼금식 살펴봅시다.
쫄지마~~
select_type은 말 그대로 SELECT 문의 종류를 의미합니다.
SIMPLE이냐,
Sub Query를 가지고 있는 Main Query냐,
Sub Query냐 등등으로 말입니다.
table은 말 그대로 table 명을 말합니다. alias일 수도 있겠지요.
possible_key를 보게되면
MySQL 옵티마이저가 Index가 타는지 확인할 수 있습니다.
쿼리 처리를 위해 key로 사용할 index 후보들을 나타내고 있는 것이지요.
이어서 key에 값이 있다면
옵티마이저가 key값으로 index를 사용했다는 사실을 알 수 있습니다.
Index를 사용할 수 있다는 자체로만으로도
빠른 Query 실행을 기대할 수 있습니다.
Extra는
옵티마이저가 쿼리를 해석한 추가적인 정보들을 나타내줍니다.
삽잡이의 예제에 있는 EXPLAIN 값을 보면
쿼리 처리를 위해서 임시 테이블을 생성했고,
filesort를 사용했다는 사실을 알 수 있습니다.
제가 예시를 통해 보여드린 Query는
Using filesort, Using temporary 가 있지요?
Query가 느릴 수 밖에 없습니다....
만약, index를 사용하지 않는다면....
더 느려지겠지요....
사용자들이 실제 사용하는 서비스에 저런 Query가 들어가면
데이터를 받아오느라 로딩이 오래 걸리겠지요?
그러면 문제가 되겠지요...
뭐 예를들어 그렇다 이겁니다.
하하...
EXPAIN을 통해 추출된 Table의 정보는
아래의 사이트에 잘 나와있으니 확인해보시길 바랍니다~!
Code도 이쁘게 Query도 이쁘게 작성하자구요~!
굳~
'삽질의 현장 > - DataBase' 카테고리의 다른 글
[삽잡이::sql] 보여줘 보여줘 너의 테이블~ SHOW CREATE TABLE (0) | 2016.06.14 |
---|---|
[삽잡이::sql] 테이블의 설명을 알아보자! DESC (0) | 2016.06.14 |
[삽잡이::sql] Primary Key 그리고 Unique Key (0) | 2016.06.14 |
[삽잡이::sql] 여러 테이블을 가지고 놀자! JOIN (0) | 2016.06.13 |
[삽잡이::sql] 데이터베이스를 편하게 관리하고 다루자! SQLyog (0) | 2016.06.11 |