안녕하세요.
데이타베이스 및 MySQL 그 자체를 갖 접하게 된 왕 초보 입니다.
샘플 디비로 쿼리를 짜는 도중 우연히 Explain 이라는 기능에 대해 알게 되였습니다.
여기저기 검색을 해 보니까 Explain 결과값의 Extra 에서 Using where, Using filesort, Using temprorary 와 같은 값이 나오면 쿼리를 주의해야 한다고 하던데 ..
제가 짠 쿼리에는 위의 3가지 경우가 다 나오더라구요. ㅡ.ㅡ;
그래서 궁금점을 해결하고자 이렇게 질문을 드립니다.
일단 테이블과 쿼리를 보여 드릴게요~
테이블 및 필드:
#SELECT customerNumber, customerName, city, state, country FROM customers;
#SELECT orderNumber, customerNumber, orderDate, requiredDate, shippedDate FROM orders;
실행쿼리:
SELECT A.orderNumber, B.customerName, A.requiredDate, A.shippedDate, A.customerNumber FROM orders AS A
JOIN customers AS B
ON A.customerNumber = B.customerNumber
WHERE A.shippedDate > A.requiredDate
ORDER BY B.customerName;
결과값: 10165 Dragon Souveniers, Ltd. 2003-10-31 00:00:00 2003-12-26 00:00:00 148
여기서 orders 라는 테이블에 orderNumber가 인덱스로 설정되 있구요 총 326건의 데이타가 있습니다.
그리고 상기 쿼리를 실행하고 나면 결과값은 한개 구요..
Explain 에서는 아래와 같이 나와요..
+----+-------------+-------+--------+---------------+---------+---------+--------------------------------+------+----------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+--------+---------------+---------+---------+--------------------------------+------+----------------------------------------------+
| 1 | SIMPLE | A | ALL | NULL | NULL | NULL | NULL | 326 | Using where; Using temporary; Using filesort |
| 1 | SIMPLE | B | eq_ref | PRIMARY | PRIMARY | 4 | classicmodels.A.customerNumber | 1 | |
+----+-------------+-------+--------+---------------+---------+---------+--------------------------------+------+----------------------------------------------+
궁금점 : Extra 에서 Using 이 3개 나오게 된 원인 혹은 문제점이 뭔지, 어떻게 하면 상기 쿼리를 최적화 시킬수 있는지 ... 답변 부탁 드립니다.
감사합니다. |