[MySQL] Explain 결과의 select_type 칼럼

1. SIMPLE
 - UNION이나 sub query를 사용하지 않는 단순한 SELECT
 - 일반적으로 제일 바깥 SELECT query가 SIMPLE로 표시된다.

2. PRIMARY
 - UNION이나 sub query가 포함된 SELECT 쿼리의 가장 바깥쪽에 있는 쿼리

3. UNION
 - UNION으로 결합하는 SELECT query에서 두번째 이후의 SELECT의 select_type
 - 첫번째는 UNION으로 결합된 전체 집합의 select_type가 표시

4. DEPENDENT UNION
 - UNION으로 결합된 쿼리가 외부의 영향을 받는다.
*** "DEPENDENT" 키워드가 포함된 sub quiery는 비효율적인 경우가 많다.

5. UNION RESULT
 - UNION 결과

6. SUBQUERY
 - FROM절에서 사용하는 쿼리
 * Nested Query : select column에 사용하는 sub query
 * Sub Query : where 절에 사용하는 sub query
 * Derived : from 절에 사용하는 sub query(inline view, sub select)

7. DEPENDENT SUBQUERY
 - 바깥쪽 select query에서 정의된 칼럼을 사용하는 sub query
쿼리의 from 절 이외의 부분에서 사용하는 서브 쿼리가 자체적으로 실행되지 못하고, 외부 쿼리에서 값을 전달받아 실해오디는 경우 DEPENDENT SUBQUERY가 표시된다.
이는 서브 쿼리가 먼저 실행되지 못하고, 서브 쿼리가 외부 쿼리의 결과 값에 의존적이기 때문에 전체 쿼리의 성능을 느리게 만든다.
서브 쿼리가 불필요하게 외부 쿼리의 값을 전달받고 있는지 검토해서, 가능하다면 외부 쿼리와의 의존도를 제거하는 것이 좋다.

8. DERIVED
 - sub query가 from 절에 사용된 경우
 *** 가능하면 sub query보다는 join을 사용하라
(DERIVED는 from 절에 사용된 서브 쿼리로부터 발생한 임시 테이블을 의미한다.
임시테이블은 메모리에 저장될 수도 있고 디스크에 저장될 수도 있다.
일반적으로 메모리에 저장하는 경우에는 크게 성능에 영향을 미치지 않지만, 데이터의 크기가 커서 임시 테이블을 디스크에 저장하면 성능이 떨어진다.)

9. UNCACHEABLE SUBQUERY
 - 쿼리의 from 절 이외의 부분에서 사용하는 서브 쿼리는 가능하면 MySQL 옵티마이저가 최대한 캐시되어 재사용 될 수 있게 유도한다.
하지만 사용자 변수나 일부 함수가 사용된 경우에는 이러한 캐시 기능을 사용할 수 없게 만든다.
이런 실행 계획이 사용된다면 혹시 사용자 변수를 제거하거나 다른 함수로 대체해서 사용 가능할지 검토해보는 것이 좋다.

10. UNCACHEABLE UNION

Posted by incree

2014/08/25 12:45 2014/08/25 12:45
, ,
Response
0 Trackbacks , 0 Comments
RSS :
http://www.incree.com/tc/incree/rss/response/354

Trackback URL : 이 글에는 트랙백을 보낼 수 없습니다


Notices

Archives

Authors

  1. incree

Recent Trackbacks

Calendar

«   2017/10   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

Site Stats

Total hits:
428045
Today:
85
Yesterday:
91